Привет, ребята, у меня есть вопрос, на который я давно искал ответ, я видел много вопросов, но никто не решил мою проблему.C++ clearing cin buffer при использовании GetAsyncKeyState()
Итак, у меня есть функция, которая захватывает имя игрока, используя строку get, которая похожа на это.
std::cout << "Enter your name"<< std::endl;
std::string input;
std::getline(std::cin, input);
и после этого у меня есть функция, которая имеет меню, которое сообщает пользователю, что он может нажать ряд клавиш, чтобы перейти к другим частям меню.
while(true)
{
//menu one
if(GetAsyncKeyState(VK_CONTROL))
{
Menu_3();
}
//here is the problem
if(GetAsyncKeyState(VK_SHIFT) && GetAsyncKeyState(0x53)) //0X53 = S
{
Menu_4();
}
}
Моя проблема заключается в том, что если я использую имя с заглавной буквой (созданной с помощью SHIFT) и «S» также Menu_4() вызывается автоматически после того, как я введите имя, например, название «Шон». если у меня есть только имя «shawn» (без использования сдвига), то это «s», похоже, сохраняется в буфере cin, и все, что требуется для перемещения, это нажать «shift», чтобы войти в Menu_4();
Как правило, входные данные передаются с запросом имени getline и закручивают мои вызовы GetAsyncKeyState().
Благодарим за помощь.
О, я вижу, но почему у вас есть xor там, что это должно быть определено как? Спасибо – user1143896
Я понял, мне нужно было получить GetAsyncKeyState (VK_SHIFT) & 0x8000, спасибо за вашу помощь. – user1143896
'xor 0x1' просто переключает LSB, это неверно. А также: MS-документы MSB и LSB, MS ничего не говорит о битах между ними. Поэтому даже проверка 'if (GetAsyncKeyState (...) & ~ 0x1)' подвержена ошибкам в случае будущих изменений API. Проверка 'GetAsyncKeyState (...) & 0x8000' - это путь. –