在按下 Enter 之前,在控制台上清除用户输入

Clear user input on console before enter is pressed

本文关键字:清除 用户 输入 控制台 Enter 之前      更新时间:2023-10-16

我正在尝试编写一个主机游戏,玩家应该能够打开宝箱。为此,用户需要在面对胸部时按"E"(对问题并不重要,只是提供上下文),然后出现一个菜单,要求输入 cin。

因此,我使用GetAsyncKeyState("E")来检测"E"键。一切都按计划进行,当按下"E"并打开"库存菜单"时会触发。问题是现在用户已经向控制台写入了一个"e"(或多个)。 我希望这种情况不会发生,因为用户必须退格才能输入所需的输入。

if(GetAsyncKeyState('E')){
int choice;
cout << "Inventory Menu" << endl;
cout << "1 - Take item" << endl;
cout << "2 - Store item" << endl;
cin >> choice; //there's already an 'e' on the console
}

我找到了问题的答案。

标准库不允许这样做,因为它只为基本 I/O 而设计。

但由于我已经在使用 WinAPI,因此有一种方法可以刷新输入缓冲区:FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));

类似问题的原始答案:http://www.cplusplus.com/forum/general/159796/