5

それが可能かどうか、また、ユーザーからの入力がない場合にループを終了するこの機能をどのように実装するかを考えています。たとえば、ユーザーが 1 分後に何も入力しない場合、ループを終了したいとします。ここに私のCコードがあります:

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

int main(void)
{
    int x;
    time_t end = time(0) + 60;
    printf("Enter a number : ");

    while (time(0) < end)
    {
        if((scanf("%d", &x)) != EOF || (getchar() != '\n'))
        {
            time_t end2 = time(0) + 60;
            while(time(0) < end2);
            main();
        }
        else
        {
            printf("%d", x);
            main();
        }
    }
    main();
}
4

3 に答える 3

2

関数を使用select()して scanf のタイムアウトを設定する

次のコードは、その使用方法の例です。

#include <stdlib.h>
#include <stdio.h>
#include <sys/time.h>

int main(void)
{
    int x;
    fd_set          set;
    struct          timeval timeout = {0};

    FD_ZERO(&set);


   while(1)
   {
        timeout.tv_sec = 30;
        FD_SET(fileno( stdin ), &set);
        printf ("enter a number:");
        fflush (stdout);
        if (select(FD_SETSIZE, &set, NULL, NULL, &timeout))
        {

           scanf("%d", &x);
           printf("The number you put is %d\r\n",x);

        }
        else
        {
                printf("\r\nTimeout: Stop reading\r\n");
                break;
        }
    }
}
于 2012-11-21T11:28:28.703 に答える
1

time() によって返される time_t 構造体は秒数である可能性が最も高いですが、それに対して計算を実行するべきではありません。代わりに difftime() を使用してください

double difftime ( time_t time2, time_t time1 );

time1 と time2 の差を秒単位で計算します。

main()内部から電話する必要はありmain()ません。なぜそれが良い考えだと思うのか私にはわかりません。

また、getchar()キーが押されるのを待つため、バックグラウンドで時間をカウントしません。

于 2012-11-21T10:53:14.140 に答える