在按下回车之前清除控制台上的用户输入
Clear user input on console before enter is pressed
我正在尝试编写一款主机游戏,玩家应该能够打开宝箱。为此,用户需要在面对箱子时按 'E'(对问题来说并不重要,只是提供上下文),然后会出现一个菜单,要求输入 cin。
因此,我使用 GetAsyncKeyState('E') 来检测 'E' 按键。一切都按计划进行,它在按下 'E' 并打开 "inventory menu" 时触发。问题是现在用户已经向控制台写入了 '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));
我正在尝试编写一款主机游戏,玩家应该能够打开宝箱。为此,用户需要在面对箱子时按 'E'(对问题来说并不重要,只是提供上下文),然后会出现一个菜单,要求输入 cin。
因此,我使用 GetAsyncKeyState('E') 来检测 'E' 按键。一切都按计划进行,它在按下 'E' 并打开 "inventory menu" 时触发。问题是现在用户已经向控制台写入了 '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));