ページ 11

一定時間経過後にループを終了させたいのですが

Posted: 2011年1月12日(水) 16:33
by かつごん
プログラム実行開始から一定時間に入力された文字数なり行数なりをカウントさせたいのですが、
以下の書き方では、まったくキーをさわらなければ永遠にプログラムが終了しません。
どうすれば、一定時間後にループを抜けれるのでしょうか?

#include <stdio.h>
#include <time.h>

int main(){
int count;
char line_buf[1024];
count = 0;

while (fgets(line_buf, 1024, stdin) != NULL && (clock()/CLOCKS_PER_SEC) < 20){
fputs(line_buf, stdout);
count++;
}
printf("%d\n",count);
}

Re: 一定時間経過後にループを終了させたいのですが

Posted: 2011年1月12日(水) 16:52
by Dixq (管理人)
環境が解りませんが、windowsであればこんなのどうでしょう。

コード:

#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <time.h>

int main(){
	clock_t t=clock();

	while ( clock()-t<2000 ){
		if( kbhit() ){
			if( getch() == 0x1b ){
				break;
			}
		}
		printf("*");
		Sleep(30);
	}
	printf("end\n");

	return 0;
}
2秒経過するか、Escが入力されると終了します。
それまでは延々と"*"を出力します。

また、ソースコードを投稿される際はcodeタグをお使いください。
詳しくはフォーラムルールに書いております。

Re: 一定時間経過後にループを終了させたいのですが

Posted: 2011年1月12日(水) 16:53
by softya(ソフト屋)
C言語の標準関数だけでは難しいかと思います。
WindowsならWin32APIやconio.hの関数などを使うことが必要になります。

Re: 一定時間経過後にループを終了させたいのですが

Posted: 2011年1月12日(水) 16:58
by なんとくなく
あまりいい方法ではないと思うが、現在時刻を所得して差をこっちで決めれば
開始時刻から何分みたいにできるのでは?