C++, стрелка вверх определена как вверх, так и вправо
Я определил четыре клавиши со стрелками как таковые
#define UP_ARROW 72
#define LEFT_ARROW 75
#define DOWN_ARROW 80
#define RIGHT_ARROW 77
И ключи проверяются с помощью _getch(), как таковой
char key = _getch();
if (key == 0 || key == -32)
{
key = _getch();
switch (key)
{
case UP_ARROW:
//These are functions not relevant to the problem
//up(1);
case DOWN_ARROW:
//down(1);
case LEFT_ARROW:
//left(1);
case RIGHT_ARROW:
//right(1);
//Pressing up will print out "test", which should not happen
printf("test");
}
}
Как прокомментировано, нажатие вверх вызовет что-либо в случае RIGHT_ARROW. Я сделал что-то неправильно?
3 ответа
Решение
Тебе необходимо break;
заявление, чтобы остановить продолжение выключателя.
Вы можете использовать оператор break, чтобы завершить обработку конкретного случая в операторе switch и перейти к концу оператора switch. Без перерыва программа переходит к следующему случаю, выполняя операторы до тех пор, пока не будет достигнут разрыв или конец оператора. В некоторых ситуациях это продолжение может быть желательным.
Без break
, case
statements runs all through:
case UP_ARROW:
//up(1);
break; //here
case DOWN_ARROW:
//down(1);
break; //and here
Я использовал это один раз, как:-
#include <stdio.h>
#include <conio.h>
#define KB_UP 72
#define KB_DOWN 80
#define KB_LEFT 75
#define KB_RIGHT 77
#define KB_ESCAPE 27
int main()
{
int KB_code=0;
while(KB_code != KB_ESCAPE )
{
if (kbhit())
{
KB_code = getch();
printf("KB_code = %i \n",KB_code);
switch (KB_code)
{
case KB_LEFT:
//Do something
break;
case KB_RIGHT:
//Do something
break;
case KB_UP:
//Do something
break;
case KB_DOWN:
//Do something
break;
}
}
}
return 0;
}