我在使用包含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'。为什么会这样?
答案 0 :(得分:0)
想想看:你的节目在做什么?你在键盘上击中了一个角色。当主要完成睡眠时,它会使用'a'调用该函数。由于kbhit为true,它将打印'a'。然后,立即再次调用IsKeyDown()。由于kbhit现在为false,因此返回时不会打印任何内容。然后主要再次睡觉,然后重新开始。
要测试此项,请将IsKeyDown更改为如果获得字符则返回1。然后在main中,测试返回值以查看正在发生的事情。