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

时间:2012-12-29 03:20:36

标签: c++ windows

我有一个在按下某些键时执行其他功能的功能。如果按's',它 将射击球员。如果'h'被按下,它只会伤害玩家。问题在于 choice = getch();下面:

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

        if (choice == 'h')
        {
            playerharm();
        }
    }
}

执行此操作时,出于某种原因,控制台等待我按两次ENTER然后才会输出&lt;&lt; “命令提示符”;。只有在2个ENTER后,我才会看到“命令提示符”输出。为什么getch()在等我输入我的信和2个ENTER?无论我在其他地方使用getch(),它都能正常工作,通常不需要我按回车键。这段代码中有什么错误,让我按两次ENTER键最终进入“命令提示符”?感谢。

2 个答案:

答案 0 :(得分:2)

getch从输入缓冲区中读取一个字符。根据您配置的输入缓冲的方式,您可能不会立即在缓冲区中输入字符 - 它们可能会被保留在驱动程序或其他地方,直到发生其他事件(例如点击&#39;输入&#39;)。

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

答案 1 :(得分:0)

你应该_getch。根据MSDN,不推荐使用getch,并且应该使用_getch:

  

从Visual C ++ 2005开始,不推荐使用此POSIX函数。使用   相反,ISO C ++符合_getch。

这里是link到_getch