1

我在调用带有包含 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”。为什么会出现这种情况?

4

1 回答 1

0

想一想:你的程序在做什么?你在键盘上敲了一个字符。当 main 完成睡眠时,它使用 'a' 调用该函数。由于 kbhit 为真,它将打印“a”。然后,它立即再次调用 IsKeyDown()。由于 kbhit 现在是假的,它返回而不打印任何东西。然后 main 再次休眠,并重新开始。

要对此进行测试,请将 IsKeyDown 更改为在获取字符时返回 1。然后在 main 中,测试返回值以查看发生了什么。

于 2014-01-17T14:03:51.750 回答