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

问题描述 投票:0回答:1

我正在尝试编写一个控制台游戏,玩家应该能够打开箱子。要做到这一点,用户需要在面对胸部时按“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
}
c++ winapi console-application cin
1个回答
0
投票

我找到了问题的答案。

标准库不允许这样做,因为它仅用于基本I / O.

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

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

© www.soinside.com 2019 - 2024. All rights reserved.