函数参数和getch()的奇怪行为

时间:2014-01-17 04:18:06

标签: 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('a');
        IsKeyDown('b');
        Sleep(100);
    }
    return (EXIT_SUCCESS);
}

当使用此代码按下某个键时,无论如何,它将始终打印'a',这是第一个函数的参数。问题是,'a'不是被调用的第二个函数的参数,但仍然打印'a'而不是'b'。为什么会这样?

1 个答案:

答案 0 :(得分:0)

想想看:你的节目在做什么?你在键盘上击中了一个角色。当主要完成睡眠时,它会使用'a'调用该函数。由于kbhit为true,它将打印'a'。然后,立即再次调用IsKeyDown()。由于kbhit现在为false,因此返回时不会打印任何内容。然后主要再次睡觉,然后重新开始。

要测试此项,请将IsKeyDown更改为如果获得字符则返回1。然后在main中,测试返回值以查看正在发生的事情。