1
#include <stdio.h>
#include <windows.h>

int main()
{
    while(1)
    {
        printf("%d", kbhit());
        Sleep(100);
    }
    return 0;
}

我注意到我正在制作的游戏中的 kbhit() 函数变得很奇怪,所以我尝试了这段代码。当没有按下键时,它在开头打印 0。然后我按了一个键,它打印了 1,即使在我停止按任何键后仍继续打印 1。为什么会这样?

4

1 回答 1

4

当没有按下键时,它在开头打印 0

kbhit()如果没有按下任何键,则返回零。


然后我按了一个键,它打印了 1,即使在我停止按任何键后仍继续打印 1。为什么会这样?

原因: kbhit() 是缓冲功能。因此,每次击键都会被发送到缓冲区,并按顺序处理。如果您不清除缓冲区,将按printf功能打印相同的输出。您可以刷新缓冲区以删除击键或使用getch.

参考:https ://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/kbhit?view=msvc-160

于 2020-12-24T06:03:35.830 回答