我一直在用 kbhit() 测试一些东西,并发现延迟无限循环的奇怪行为。在此代码示例中,我将循环延迟为每秒运行 30 次。
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
_Bool IsKeyDown(char c)
{
if(kbhit())
{
char ch1 = getch();
if(ch1 == c)
return 1;
}
return 0;
}
/*
*
*/
int main(int argc, char** argv) {
while(1)
{
if(IsKeyDown('a'))
{
printf("HELLO\n");
}
if(IsKeyDown('b'))
{
printf("HI\n");
}
Sleep(1000 / 30);
}
return (EXIT_SUCCESS);
}
问题是,虽然循环中的第一个 if 语句工作正常,但第二个 if 语句几乎不起作用。如果在此示例中按住“a”键,则会无限期打印 HELLO。如果您按住“b”键,则几乎不会打印 HI(如果有的话)。
为什么会出现这种行为?