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

时间:2019-04-03 21:41:09

标签: c++ winapi console-application cin

我正在尝试编写一个主机游戏,并且该玩家应该能够打开箱子。为此,用户需要面对胸部时按“ 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
}

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法。

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

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

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