gpt4 book ai didi

c++ - 哔声直到任何输入

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:54:38 25 4
gpt4 key购买 nike

我正在制作一个测验程序。所以我想要的是,无论何时向用户提出任何问题,他都有 30 秒的时间来回答。在这 30 秒内,我希望以 1 秒的间隔发出哔声 ('\a')。现在我想要的是,只要用户输入任何内容,这种哔声就应该停止。我创建了这个小功能来产生 30 秒的蜂鸣声 void beep(){ for(int i=0;i<30;i++){cout<<"\a"; Sleep(1000); }
}
但是我不知道如何在用户输入他/她的答案后立即停止它,因为一旦我调用它,直到它结束之前什么都做不了。任何人都可以为此提供任何解决方法吗?

最佳答案

免责声明:我不是 Windows 程序员,我不知道这是否是好的风格,甚至不知道它是否可以编译或工作。我不能在这里测试它。但是,由于没有其他人给出解决方案,因此这是一个起点。我会在了解更多信息后编辑此答案,希望对此有更多了解的人会出现。

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

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

编辑:将其更新为立即读回被击中的键(而不是等待用户按下回车键)。

这是重要的功能: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;
}

关于c++ - 哔声直到任何输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11778115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com