我正在制作测验程序。所以我想要的是,只要有任何问题出现在用户面前,那么他就有30秒的时间回答。在这30秒内,我希望每隔1秒发出一次哔声('\ a')。现在我要的是,一旦用户输入任何声音,此哔声便应停止。我创建了这个小功能来产生30秒的哔声void beep(){ for(int i=0;i<30;i++){cout<<"\a"; Sleep(1000); }}但是我不知道如何在用户输入答案后立即将其停止,因为一旦我拨打了电话,就无法解决。
谁能为此提供任何解决方法?

最佳答案

免责声明:我不是Windows程序员,我不知道这是好的样式,还是可以编译或工作。我不能在这里测试。但是,由于没有其他人提供解决方案,因此这是一个起点。当我了解更多信息时,我将编辑此答案,希望有人对此有所了解。

编辑:我将_kbhit()伪造为返回false的琐碎函数,它至少可以编译并且看起来运行正常

编辑:好的,我确实有ms visual studio在工作,我只是从不使用它。现在的代码可以编译并正常工作(不过我怀疑时机已到)。

编辑:对其进行了更新,以立即回读被击中的键(而不是等待用户按下Enter键)。

这是重要的功能:http://msdn.microsoft.com/en-us/library/58w7c94c%28v=vs.80%29.aspx

#include <windows.h>
#include <conio.h>
#include <ctime>
#include <iostream>
#include <string>

int main()
{
    time_t startTime, lastBeep, curTime;
    time(&startTime);
    lastBeep = curTime = startTime;
    char input = '\0';

    while ( difftime(curTime,startTime) < 30.0 )
    {
        if ( _kbhit() ) // If there is input, get it and stop.
        {
            input = _getch();
            break;
        }
        time(&curTime);
        if ( difftime(curTime,lastBeep) > 1.0 ) // More than a second since last beep?
        {
            std::cout << "\a" << "second\n" << std::flush;
            lastBeep = curTime; // Set last beep to now.
        }
    }
    if ( input )
    {
        std::cout << "You hit: \"" << input << "\"\n" << std::flush;
    }

    return 0;
}

09-05 23:14