C言語関係掲示板

過去ログ

No.552.タイマーの使い方について

[戻る] [ホームページ]
No.4904

タイマーの使い方について
投稿者---mana(2003/02/01 15:47:31)


時間内にa配列の中の文字列を入力しないと強制終了。要するにタイピング練習見たいな物を作りたいんですが、タイマーの使い方が分かりません。
よかったらアドバイスお願いします。
ちょっと分かりにくいかと思いますがよろしくお願いします。

#include<conio.h>
#include<stdlib.h>
#include<string.h>

int main(void)
{
   time_t time1, time2;
   char a[]="今日はいい天気だ";
   char b[20];
   int  i;

   time(&time1);

   while(1){ 
    /*このwhile文中に
           
    scanf("%s",b);
      if(strcmp(a,b)==0){
        i++;
        break;
      }
    この文を入れたい。*/

         time(&time2);
           if((difftime(time2,time1))==2.0){
                break;
             }
         }

   if(i==1){
        printf("早いですね。\n");
        }
        else{
        printf("残念でした。\n");
        }

   getch();
   return(0);
}


No.4909

Re:タイマーの使い方について
投稿者---通りすがり(2003/02/02 14:40:36)


割り込みタイマーのことかな?


No.4924

Re:タイマーの使い方について
投稿者---mana(2003/02/03 09:29:27)


タイマーの使い方を教えてださい。お願いします。

No.4965

Re:アドバイスお願いします。
投稿者---stod(2003/02/04 00:04:49)


急いでいるなら少なくても環境くらいはちゃんと書いてくださいね。

scanfでは入力が完了しなければ処理を戻してくれないので、今回は適さないと思います。入力中でもscanfから処理を戻さなければ正確な経過時間が測れませんので、制限時間を過ぎた時強制終了に持っていくことができません。

簡単に作ってみましたので参考にしてみてください。貴方のプログラムを拝見しましたが、そこまで作れるならば説明は不要だと思いますので細かい点はご自分で調べてみてください。
Borland C++ 5.5使用

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

/* 時間[s]
今のところこの数値は適当です */
#define     TIME_FAST       3   /* 速い : 0 〜 3以下 */
#define     TIME_NORMAL     7   /* 普通 : 4 〜 7以下 */
#define     TIME_LIMIT      10  /* 遅い : 8 〜 10未満 */
                                /* 制限時間 : 10 */

int main(void)
{
    char    *a = "今日はいい天気だ";
    char    *p = "kyouhaiitenkida";
    time_t  time1;
    double  s;

    printf("お題 : %s - %s\n",a,p);

    time(&time1);   /* 開始時間 */
    while(*p){

        /* キーが入力されていない時、開始時間と現在の時間の差を求めて
        制限時間に達したかを調べる */
        if (!kbhit()){
            if ((s = difftime(time(NULL),time1)) >= TIME_LIMIT)
                break;
            continue;
        }

        /* 入力された文字とpの指す現在の文字が一致しない時
        ブザーを鳴らす */
        if (*p != (char )getch()){
            printf("\a");
            continue;
        }

        /* キーが一致した時、その文字を表示 */
        printf("%c",*p++);
    }

    printf("\n%d秒\n",(int)s);  /* 経過時間の表示 */

    /* 時間の差分毎のメッセージを表示する */
    if (s <= TIME_FAST)
        printf("速いです。\n");
    else if (s <= TIME_NORMAL)
        printf("普通です。\n");
    else if (s < TIME_LIMIT)
        printf("遅いです。\n");
    else
        printf("制限時間オーバー 修行が足りません。\n");

   return 0;
}




No.4986

Re:アドバイスお願いします。
投稿者---mana(2003/02/04 17:44:22)


ありがとうございました。しかし今までに見た事のないような文字が出てきてびっくりです。
!kbhit()初めてみました。よかったら詳しく教えてもらえませんか。お願いします。
環境は Borland c++ 5.02です。


No.4987

Re:アドバイスお願いします。
投稿者---雪猫(2003/02/04 18:06:13)


こんばんわ、雪猫です♪

kbhit()関数についてですが、
過去ログはお調べになりましたでしょうか?
ここで〜す。
ここのNo220を参照ください。


No.4990

Re:アドバイスお願いします。
投稿者---mana(2003/02/04 19:53:40)


どうもありがとうございました。すごい勉強になりました。