【发布时间】:2016-07-26 15:07:43
【问题描述】:
我正在编写一个乘法表程序来帮助我的侄女学习。我希望她能够有一定的时间来回答每个问题(因此 for 循环起到了延迟的作用)。延迟有效,因为在 delay 秒后程序输出“时间到了”!但是,程序仍然等待我输入一个值并在它评估 answer 之前按 enter 并检查它是“正确”还是“错误”(这不是通过放置 printf 和 scanf在for循环之后一起在循环内)。我知道延迟只是等待几秒钟,然后正常继续,这就是为什么我需要输入一个数字并按 Enter 键。但是,我不知道如何解决这个问题。
基本上,我希望程序在 delay 秒后自动“输入”并且她没有输入值,从而导致答案为“错误”。但是,如果她输入一个值并在 delay 秒结束之前按 Enter,我仍想检查它是“正确”还是“错误”。我已经寻找其他方法来做到这一点,但我根本无法做到这一点。这是到目前为止的代码(再次,我知道 for 循环延迟只会让程序等待 delay 秒,然后才能正常继续,但我不知道如何解决这个问题。
time_t start_time = 0;
int delay = 0;
int answer = 0;
int correct = 0;
int wrong = 0;
printf("How long should the delay be?:\t");
scanf("%d", &delay);
start_time = clock();
printf("\n2 x 4 =\t");
for( ;clock() - start_time <= delay*CLOCKS_PER_SEC; );
printf("\n\nTime's up!\n\n");
scanf("%d", &answer);
if(answer == 8)
{
printf("\nCorrect!\n");
++correct;
}
else if(answer != 8)
{
printf("\n\aWrong!\n");
++wrong;
}
编辑:我正在运行 Windows 并使用带有 mingw32 的 CodeBlocks。我只是希望程序是一个简单的 .exe 文件,它将通过 CMD 运行。 (虽然它已经这样做了)。
【问题讨论】:
-
这在很大程度上取决于操作系统(Windows、Linux、...)。
-
我问过了,但是当我问了一个几乎没有代码的问题时,有人将我引导到一个带有计时器的网页,我检查了那个网页,这就是我已经走了多远,但是我现在很难过。我将使用我的操作系统、IDE 和编译器编辑帖子。
-
看看this SO question,但这并不简单。您可能需要重写输入函数来替换 scanf (无论如何这是个好主意,因为如果无法预测用户输入,则 scanf 非常糟糕)。
-
最简单直接的方法是使用 threads。
-
@n.m.:另一个线程将如何提供帮助?您仍然必须取消计时器以响应正确的输入,并取消输入以响应经过的计时器。通过在问题上抛出一个新线程都不能启用任何一个。您需要异步调用。多线程在这里是错误的异步方式。
标签: c winapi windows-console