所以,这是一个倒计时。 我的目标是下一个:如果你在给定的时间内没有做任何事情(ent_sec),倒计时将在一段时间后达到0并返回0,但如果你按下字母c(代码:99)倒计时停止并且您可以输入您的PIN码并随之返回。 我已经用下一个方法解决了Windows.h的问题:
if (GetAsyncKeyState(VK_SPACE))
这解决了问题是通过WIN32 API(在这种情况下你必须按SPACE,而不是字母'c'),但它显示我不能使用任何WinAPI功能(学校项目)。所以我将这一行重写为以下内容:
if (getchar() == 99)
但遗憾的是它不能以正确的方式工作,导致我的倒计时几乎每秒都停止,直到我不按某些“错误”键(例如我按'x',然后倒计时前进,但是在下一秒它再次停止)...在第一个解决方案(win func)中,这个问题不存在......那我该怎么办呢?谢谢。这是我的函数的完整代码:
unsigned Timer::DownCount
{
int ent_sec = this.time;
cout << "The counter has started (" << this.time << "sec), press 'C' to enter your PIN code: " << endl;
while (ent_sec >= 0)
{
if (getchar() == 99) // c letter's code is 99 in ANSI (or ASCII dunno)
{
unsigned code;
cout << "PIN code: ";
cin >> code;
return code;
}
else
{
SecCounter(1); // this function counts 1 secundum
cout << ent_sec << endl;
ent_sec--;
}
}
return 0;
}
答案 0 :(得分:1)
我不相信有一种标准的方法可以在所有平台上运行,但是这样做的一种方法是在Windows上运行而不实际使用Windows API函数。
int getch_nowait()
{
if (!kbhit()) return -1;
return getch();
}
然后你的支票就变成了if (getch_nowait() == 99) ...
此代码可能是特定于编译器的。如果它不适合你,如果你告诉我们你正在使用什么编译器和操作系统,这将有所帮助。