1

我想编写一个程序,让用户在特定时间段内猜测一个数字。如果他未能在时间段内猜出正确的数字,则会发生超时,游戏将从第一个开始。

喜欢

main() {
    int i, timer;
    while(1) {
        /* How to run the timer independently and it will signal that time out !!!*/
        for(i = 0; i <= 10; i++) {
            printf("\n Guess the value of i : ");
            scanf("%d", &j);
            if(i != j) {
                printf("Bad Luck wrong Guess ");
            }
            else
                printf("Great, You guessed correctly \n");
        }
    }
}

在这个程序中,我只是不知道在哪里运行计时器以及如何运行?请帮我。

4

3 回答 3

1

您的基本问题似乎是 scanf() 在用户按下 Enter 之前不会返回。因此,即使计时器已过期,在用户按下 Enter 之前也不会发生任何事情。

在标准 ANSI C 中,对此没有真正的解决方案。您将需要使用特定于平台的功能。

Windows 上的一种可能性是将 conio.h 头文件与_kbhit()之类的函数一起使用。这使您可以在尝试读取之前测试是否按下了某个键,因此如果没有按下任何键,您可以继续检查计时器。如果某个键被按下,您可以使用 getc() 读取它,而不必担心 getc() 会坐在那里等待用户按下某个键。继续将读取的键添加到字符数组,直到您读取 '\n' 字符。然后使用 sscanf() 将字符串转换为数字。

对于计时器本身,您可以只检查 time() 函数的返回值。

这不是解决问题的最有效方法,因为当您编写代码时,您会发现程序正在一次又一次地循环测试 _kbhit()。

在 Windows 上更有效的解决方案是使用重叠 I/O,但这可能超出了您当前尝试的范围。

于 2012-06-20T11:34:25.600 回答
0

您可以使用该信号进行倒计时并触发相应的动作。

signal(SIGALRM,countdown);
setitimer(ITIMER_REAL,&new_timeset,NULL);

倒计时是您要执行的功能

于 2012-06-20T15:07:16.883 回答
0

如果超过时间限制,如何使用gettimeofday()和检查每次之前的时间,您可以打破循环并显示消息。scanf

于 2012-06-20T11:07:36.807 回答