Как определить, была ли нажата какая-либо клавиша на клавиатуре, кроме определенной клавиши на клавиатуре C ++?

У меня есть следующий код, который работает нормально.

int x = 0;
int main()
{
while(true) {
if (GetKeyState('A') & 0x8000 && x == 0) {
Sleep(500);
x = 1;
}
else if (GetKeyState('B') & 0x8000 && x == 1) {
Sleep(500);
x = 2;
}
else if (GetKeyState('C') & 0x8000 && x == 2) {
Sleep(500);
x = 0;
//Do Something
}
}
}

Для того, чтобы выполнить //Do Something часть кода, пользователь должен сначала нажать A, затем B а потом C в этой последовательности. Однако пользователь может нажать любую клавишу между ними, и она все равно будет работать. Так в дополнение кA+B+C«следующее также будет работать.

  1. A+C+B+C
  2. A+Q+B+C
  3. A+F11+B+8+LSHIFT+Spacebar+Tab+C

Я хочу только A+B+C сочетание для работы. Ни один из вышеперечисленных.

Код, который я пытаюсь реализовать, выглядит примерно так

int x = 0;
int main()
{
while(true) {

if (GetKeyState('A') & 0x8000 && x == 0) {
Sleep(500);
x = 1;
}
else if (GetKeyState('B') & 0x8000 && x == 1) {
Sleep(500);
x = 2;
}
else if (GetKeyState(/*Any keyboard input other than 'B' or 'A'*/) & 0x8000 && x == 1) {
Sleep(500);
x = 0;
}
else if (GetKeyState('C') & 0x8000 && x == 2) {
Sleep(500);
x = 0;
//Do Something
}
else if (GetKeyState(/*Any keyboard input other than 'C' or 'B'*/) & 0x8000 && x == 2) {
Sleep(500);
x = 0;
}
}
}

Итак, вы видите, я понимаю логику требуется. Я просто не знаю правильный код, необходимый для замены закомментированной части моего кода. Обратите внимание, что причина, по которой я ввел две клавиши в комментариях, заключается в том, что пользователь может случайно нажать клавишу дважды или трижды, для чего ему / ей нужно извиниться, а код должен работать.

Я думаю, что изо всех сил старался сделать этот вопрос максимально понятным. Если не можете предложить изменения.

0

Решение

В Windows для простоты вы можете использовать _kbhit () если нет конкретной причины, которую вы хотите использовать GetKeyState

#include <iostream>
#include <conio.h>

int main()
{
int x = 0;
while (true)
{
if (!_kbhit())
continue;

switch (_getch())
{
case 'A':
x == 0 ? ++x : x = 0;
break;
case 'B':
x == 1 ? ++x : x = 0;
break;
case 'C':
x == 2 ? ++x : x = 0;
break;
default:
x = 0;
}

if (x == 0)
std::cout << "Oops!" << std::endl;
else if (x == 3)
{
std::cout << "Bingo!" << std::endl;
break;
}
}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]