奇怪的行为与函数的参数和函数getch()(Strange behavior with functi

2019-10-19 05:48发布

我到一些奇怪的行为与运行调用函数与含有残培参数()。

就拿下面的代码:

_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”。 这是为什么出现?

Answer 1:

想想看:什么是你的程序在做什么? 你按下键盘上的字符。 当主完成睡觉,它调用“A”的功能。 由于是的kbhit真实的,它会打印“A”。 然后立即它()再次调用IsKeyDown。 由于是的kbhit现在假的,它不返回任何打印。 然后,主睡去了,它开始。

为了测试这个,改变IsKeyDown返回1,如果它得到一个角色。 然后,在主,测试返回值,看看发生了什么。



文章来源: Strange behavior with function parameters and getch()