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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
かつごん

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

#1

投稿記事 by かつごん » 14年前

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

#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);
}

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

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

#2

投稿記事 by Dixq (管理人) » 14年前

環境が解りませんが、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タグをお使いください。
詳しくはフォーラムルールに書いております。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#3

投稿記事 by softya(ソフト屋) » 14年前

C言語の標準関数だけでは難しいかと思います。
WindowsならWin32APIやconio.hの関数などを使うことが必要になります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

なんとくなく

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

#4

投稿記事 by なんとくなく » 14年前

あまりいい方法ではないと思うが、現在時刻を所得して差をこっちで決めれば
開始時刻から何分みたいにできるのでは?

閉鎖

“C言語何でも質問掲示板” へ戻る