1

我有一个功能可以在按下某些键时执行其他功能。如果按下's',它将射击玩家。如果按下“h”,只会伤害玩家。问题在于选择 = 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,然后才会输出 <<“命令提示符”;。只有在 2 个 ENTER 之后,我才会看到“命令提示符”输出。为什么 getch() 等待我输入我的字母和 2 个 ENTER ?无论我在哪里使用 getch() 这个函数,它都可以正常工作并且通常不需要我按 Enter 键。这段代码有什么问题,让我按两次 ENTER 最终进入“命令提示符”?谢谢。

4

2 回答 2

2

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

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

于 2012-12-29T03:29:54.980 回答
0

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

从 Visual C++ 2005 开始不推荐使用此 POSIX 函数。请改用符合 ISO C++ 标准的 _getch。

这是_getch的链接

于 2012-12-29T05:46:35.300 回答