为什么getch()需要按下一个键才能继续执行其余的代码?

Why does getch() require a key to be pressed to continue through rest of code?

本文关键字:执行 继续 代码 getch 下一个 为什么      更新时间:2023-10-16

我有一个函数,当按下某些键时执行其他函数。如果's'被按下,它会射击玩家。如果按下"h",只会伤害玩家。问题在于select = getch();下图:

void* command(void* data)
{
    choice = getch(); //This is where the problem begins...
    cout << "Command Promptnn"; //I must click enter twice to view this output. why is this???
    while (health > 0)
    {
        if (choice == 's')
        {
            playershot();
        }
        if (choice == 'h')
        {
            playerharm();
        }
    }
}

当执行这个命令时,由于某些原因,控制台等待我按两次ENTER,然后才会计数<<"命令提示符";。只有在2个ENTER之后,我才会看到"命令提示符"输出。为什么getch()等待我输入我的字母和2个回车?无论我在这个函数中使用getch(),它都工作得很好,通常不需要我按enter。什么在这个代码是错误的,让我按ENTER两次,最后得到"命令提示符"?谢谢。

getch从输入缓冲区中读取一个字符。根据您如何配置输入缓冲,您可能不会立即在缓冲区中键入字符—它们可能被保存在驱动程序或其他地方,直到发生其他事件(例如按下'enter')。

如何配置输入处理取决于您的系统/操作系统。

你应该_get。根据MSDN, getch已被弃用,应该使用_getch:

这个POSIX函数从Visual c++ 2005开始已弃用。使用ISO c++的一致性_getch。

这里是_getch的链接