gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:45:39 24 4
gpt4 key购买 nike

我在调用参数包含 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 完成 sleep 时,它会调用带有 'a' 的函数。由于 kbhit 为真,它将打印“a”。然后,它立即再次调用 IsKeyDown()。由于 kbhit 现在为 false,它返回时不打印任何内容。然后 main 再次休眠,然后重新开始。

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

关于c - 函数参数和 getch() 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21177800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com