函数参数和getch()的奇怪行为

我在使用包含getch()的参数调用函数时遇到了一些奇怪的行为。

以下面的代码为例:

_Bool IsKeyDown(char c) { if(!kbhit()) return 0; char ch1 = getch(); printf("%c\n", c); return 0; } /* * */ int main(int argc, char** argv) { while(1) { IsKeyDown('a'); IsKeyDown('b'); Sleep(100); } return (EXIT_SUCCESS); } 

当使用此代码按下某个键时,无论如何,它将始终打印’a’,这是第一个函数的参数。 问题是,’a’不是被调用的第二个函数的参数,但仍然打印’a’而不是’b’。 这是为什么会发生的?

想一想:你的程序在做什么? 你在键盘上击中了一个角色。 当主要完成睡眠时,它会使用’a’调用该函数。 由于kbhit为true,它将打印’a’。 然后,立即再次调用IsKeyDown()。 由于kbhit现在为false,因此返回时不会打印任何内容。 然后主要再次睡觉,然后重新开始。

要对此进行测试,请更改IsKeyDown,如果它获得一个字符,则返回1。 然后在main中,测试返回值以查看发生了什么。