Очистить пользовательский ввод на консоли перед нажатием Enter - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь запрограммировать консольную игру, и игрок должен иметь возможность открывать сундуки. Чтобы сделать это, пользователю нужно нажать «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 голосов
/ 04 апреля 2019

Я нашел ответ на мою проблему.

Стандартная библиотека не позволяет сделать это, поскольку она предназначена только для базового ввода-вывода.

Но так как яуже используя WinAPI, есть способ очистить буфер ввода: FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));

Оригинальный ответ на аналогичный вопрос: http://www.cplusplus.com/forum/general/159796/

...