我正在运行一些奇怪的行为,使用包含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是真的,它会打印“a”。然后,它立即再次调用IsKeyDown()。因为kbhit现在是false,所以它返回时不打印任何内容。然后main又睡着了,它又开始了。
要测试这个,将IsKeyDown更改为如果它得到一个字符,则返回1。然后在main中,测试返回值以查看发生了什么。

10-02 21:59