函数参数和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(

我在使用包含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'。为什么会发生这种情况?

想想看:你的程序在做什么?你敲击键盘上的一个字符。当main完成睡眠时,它用“a”调用函数。由于kbhit为true,它将打印“a”。然后,它立即再次调用IsKeyDown()。由于kbhit现在为false,因此它返回时不打印任何内容。然后梅因又睡着了,一切又重新开始


为了测试这一点,将IsKeyDown更改为返回1(如果它得到一个字符)。然后,主要测试返回值,看看发生了什么。

这不是答案,而是问题:为什么要在
ch
中存储一个值,然后再也不使用该值?为什么要使函数的返回值
\u Bool
始终返回相同的值。为什么不使用调用者中的返回值?在你问这种关于代码的详细问题之前,我会确保逻辑是可靠的。你可能想打印“ch1”而不是“c”。