我想实现一个函数,如果按下某个键或者时间用完,它将退出倒数计时器循环.我正在使用延时来制作倒数计时器,并且在延时之后,控制台将刷新.但是,当我按下一个键时,它不会退出循环.有人可以帮忙吗?
这是我的代码:
int b=0;
while(minutes_left>0)
{
for(minutes_left=minutes_left;minutes_left>0 && b==0;minutes_left-=10)
{
system("cls");
banner();
printf(" TIME LEFT\n");
printf("----------------\n");
printf(" %d:%d0\n",(minutes_left/60), (minutes_left%60)/10);
printf("----------------\n");
printf("\nPress any key to enter you transaction code and finish parking\n");
b=kbhit();
Sleep(10000);
}
}
Run Code Online (Sandbox Code Playgroud)
kbhit()不等待任何输入,只要在您进行测试的瞬间按下一个键,它就会返回.所以在这种情况下,你根本不需要在你需要的时候完全按下键,然后你就会立即进入睡眠状态.
正常使用类似于:
while (!kbhit())
Run Code Online (Sandbox Code Playgroud)
所以你可以坐下来等待按键.在你的情况下,因为你想要睡觉,你应该做一些"倒计时"操作检查按键...我没有一个很好的例子,所以我只是说:
int countdown;
for(minutes_left=minutes_left;minutes_left>0 && b==0;minutes_left-=10)
{
countdown = 0;
system("cls");
...
while(countdown++ <= 1000){ // give a second to hit something
if(b=kbhit()) // if the user presses a key
break; // leave the loop early
Sleep(1); // else, sleep for 1 ms and try again
}
if (b == 0) // if nothing was pressed
Sleep(9000); // sleep for another 9s
Run Code Online (Sandbox Code Playgroud)
编辑: 我认为你的问题可能是在代码中的其他地方...我把旧的Windows电脑掸掉并尝试了一下:
int main()
{
int i, b = 0, countdown;
for(i = 0; i<10000 && b ==0; i++)
{
countdown = 0;
system("cls");
printf("menu stuff %d\n", i);
while(countdown++ <= 1000) {
if(b = kbhit())
break;
Sleep(1);
}
if(b == 0)
Sleep(9000);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这个程序适用于我获取输入和打破睡眠机制.