我正在尝试编写一个控制台游戏,玩家应该能够打开箱子。要做到这一点,用户需要在面对胸部时按“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));