GetAsyncKeyState создает проблемы с CIN - PullRequest
4 голосов
/ 12 декабря 2011

В настоящее время я создаю консольную игру для школы, и у меня возникают проблемы с использованием GetAsyncKeyState для моего главного меню. Мое главное меню работает в бесконечном цикле, который прерывается только один раз при нажатии клавиши. Например, у меня есть:

if(GetAsyncKeyState('1'))
{   
    Play();
    break;
}

Это само по себе работает нормально. Проблема заключается в том, что в моем методе Play () у меня есть выражение cin сразу же, и в моем Play () появляется «1» из Menu (). Я попытался cin.clear () безрезультатно, и cin.ignore (...) предотвращает мгновенное изменение с Menu () на Play (). Есть ли способ предотвратить это?

1 Ответ

3 голосов
/ 12 декабря 2011

Попробуйте до звонка Play()

FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));

Кроме того, когда вы используете GetAsyncKeyState, вы должны маскировать все, кроме старшего бита, например:

if ((GetAsyncKeyState('1') & 0x8000) != 0)

См. Документацию в разделе «Возвращаемое значение», чтобы понять, почему: http://msdn.microsoft.com/en-us/library/windows/desktop/ms646293%28v=vs.85%29.aspx

...