#c
Вопрос:
У меня есть простой фрагмент кода, который обнаруживает нажатия клавиш с помощью ncurses
.
Как я понимаю, 1 нажатие клавиши помещает 3 значения в буфер. Где 3-е значение различается, например, между клавишами со стрелками.
Поэтому при нажатии любой из 4 стрелок на клавиатуре первые 2 значения, помещенные в буфер , должны быть одинаковыми 33
, и [
. Но 3-е значение уникально для стрелки ( A
для вверх, B
для вниз, C
для вправо или D
влево). Поэтому при сопоставлении действий с нажатиями клавиш мы зависим от 3-го значения.
При попытке оценить, какая стрелка была нажата, я попробовал как if else
лестницу, так и a switch
. if else
Лестница работает идеально. Но переключатель, похоже, срабатывает в нескольких случаях при каждом нажатии клавиши.
Вот рабочий код (если еще) —
char first = getch(); //returns 33 char second = getch(); //returns [ char third = getch(); // returns A or B or C or D if(third == 'A'){ printf("Up Arrow Pressed"); } else if(third == 'B'){ printf("Down Arrow Pressed"); } else if(third == 'C'){ printf("Right Arrow Pressed"); } else if(third == 'D'){ printf("Left Arrow Pressed"); }
Вот код, который не работает (Случай) —
char first = getch(); //returns 33 char second = getch(); //returns [ char third = getch(); // returns A or B or C or D switch(third){ case('B'): printf("nDOWN"); case('C'): printf("nRIGHT"); case('A'): printf("nUP"); case('D'): printf("nLEFT"); default: printf("default"); }
Это вывод, когда используются случаи, и я нажимаю клавишу вниз:
Комментарии:
1.
if(third == "A")
так и должно бытьif(third == 'A')
. То же самое касается и других условий.2. Вы забыли
break;
заявление в конце каждого дела в коммутаторе.3. @kaylum: Кроме того, если это не просто опечатка,
Third
то должна быть пара sthird
.
Ответ №1:
если вы этого не break;
сделаете в конце дела, будет выполнено следующее дело.
Ответ №2:
Если вы не используете break
в конце каждого случая, то случаи, которые вы пишете после истинного случая, также будут выполнены.
Ответ №3:
Используйте «break;» (так же, как в коде, представленном в виде изображения) в качестве последнего оператора в каждом случае, чтобы предотвратить выполнение последующих случаев.! (https://i.stack.imgur.com/up2pG.png)
Комментарии:
1. Пожалуйста, отправьте свой код непосредственно на вопрос, не нужно добавлять дополнительные URL-адреса, которые могут стать недействительными в будущем.