函数参数和getch()的奇怪行为
我在使用包含getch()的参数调用函数时遇到了一些奇怪的行为 以以下代码为例:函数参数和getch()的奇怪行为,c,function,getch,conio,C,Function,Getch,Conio,我在使用包含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(
_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'。为什么会发生这种情况?想想看:你的程序在做什么?你敲击键盘上的一个字符。当main完成睡眠时,它用“a”调用函数。由于kbhit为true,它将打印“a”。然后,它立即再次调用IsKeyDown()。由于kbhit现在为false,因此它返回时不打印任何内容。然后梅因又睡着了,一切又重新开始
为了测试这一点,将IsKeyDown更改为返回1(如果它得到一个字符)。然后,主要测试返回值,看看发生了什么。这不是答案,而是问题:为什么要在
ch
中存储一个值,然后再也不使用该值?为什么要使函数的返回值\u Bool
始终返回相同的值。为什么不使用调用者中的返回值?在你问这种关于代码的详细问题之前,我会确保逻辑是可靠的。你可能想打印“ch1”而不是“c”。