如何编写一个独立运行两个任务的程序?

时间:2012-06-20 10:53:56

标签: c

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

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

在这个程序中我只是无法理解在哪里运行计时器以及如何操作? 请帮帮我。

3 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以使用信号倒计时并触发相应的操作。

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

倒计时是您要执行的功能

相关问题