在一段时间后自动继续下一个语句

时间:2016-06-01 08:16:26

标签: c

我正在写一个简单的程序来帮助我的侄女学习她的乘法表。为了防止她花太长时间,我想使用一个计时器,经过一段时间后,程序会自动跳到下一个问题而不输入任何东西。如果程序然后执行此操作,它将递增一个计数器,显示她没有时间的时间,如下所示:

if(table_to_test == 2)
       {
           finish = clock() + time_to_complete;
           ++tries;
           printf("2 x 8 = ");
           scanf("%d", &answer);
           if(answer == 16 && (clock() < finish))
           {
               printf("Correct!\n");
               ++amount_correct;
           }
           else if(answer != 16 && (clock() < finish))
           {
               printf("\aWrong!\n");
           }
           else if(clock() > finish)
           {
               printf("\aTime's up!\n");
               ++ran_out_of_time;
           }
       }

结束是在计时器跳到下一个问题之前她有多长时间,time_to_complete是用户输入程序在自动跳到下一个问题之前给你的时间。

每当我运行它时,无论我多快输入答案,程序都会输出“Time is up!”线。

time_to_complete和finish的类型为int

2 个答案:

答案 0 :(得分:1)

你不能用scanf来做这件事,它太直率了 - 如果用户没有输入任何东西,它会永远锁定程序。

您必须使用某些特定于操作系统的非标准控制台功能,这样您无需等待用户即可查看控制台输入。将此项与计时器结合使用,计时器会在时间结束时标记您。

您没有提到您正在使用的系统。有Linux ncurses或Windows“控制台API”等,它们都不是标准的C.

专业解决方案涉及使用多个线程,但这可能有点过头了。

答案 1 :(得分:-1)

您是否将time_to_complete变量指定为秒的时间?

尝试更改以下函数调用的clock()调用:

clock_t clock_wrapper()
{
   return clock()/CLOCKS_PER_SEC;
}

if(table_to_test == 2)
   {
       finish = clock_wrapper() + time_to_complete;
       ++tries;
       printf("2 x 8 = ");
       scanf("%d", &answer);
       if(answer == 16 && (clock_wrapper() < finish))
       {
           printf("Correct!\n");
           ++amount_correct;
       }
       else if(answer != 16 && (clock_wrapper() < finish))
       {
           printf("\aWrong!\n");
       }
       else if(clock_wrapper() > finish)
       {
           printf("\aTime's up!\n");
           ++ran_out_of_time;
       }
   }

CLOCKS_PER_SEC是将时钟转换为秒的分频器。