Могут ли все ключи быть представлены как один символ в c ++? - PullRequest
4 голосов
/ 03 февраля 2010

Я искал вокруг, и я не могу найти способ представить клавиши со стрелками или escape-клавишу как один символ в c ++. Это вообще возможно? Я ожидаю, что это будет похоже на \ t или \ n для табуляции и новой строки соответственно. Всякий раз, когда я ищу экранированные символы, всегда есть список из пяти или шести хорошо известных символов.

Ответы [ 4 ]

11 голосов
/ 03 февраля 2010

Короткий ответ - нет.

Длинный ответ состоит в том, что в стандартном наборе символов ANSI имеется ряд управляющих символов (от десятичного 1 до десятичного 31 включительно), среди которых контрольные кодыдля перевода строки, возврата каретки, конца файла и т. д.Некоторые из них обычно интерпретируются как стрелки и клавиша выхода, но только для совместимости с терминалами.

Стандартные клавиатуры ПК отправляют 2- или 3-байтовый управляющий код, который представляет нажатую клавишу, в каком состоянии она находится, какая клавиша управления / alt / shift нажата, и еще несколько вещей.Вы захотите посмотреть «коды клавиш», чтобы увидеть, как с ними обращаться.Работа с ними различается в зависимости от операционной системы и используемых вами базовых библиотек, а их значение зависит от конфигурации клавиатуры операционной системы (которая может включать символы, которых нет в наборе символов ANSI).

1 голос
/ 03 февраля 2010

не возможно; Клавиатуры, построенные для некоторых языков, имеют символы, которые не могут быть представлены в символе, и в любом случае, как вы представляете control-option-command-shift-F11 в символе?

Клавиатуры отправляют скан-коды, которые представляют собой какое-то событие в системе с графическим интерфейсом или короткую строку байтов, представляющих ключ. Какие коды зависят от вашей системы, но на большинстве терминальных систем ncurses знает, как с ними обращаться.

0 голосов
/ 03 февраля 2010

Для клавиш со стрелками нет escape-символов.Они представлены в виде ключевых кодов, афаик.Я предлагаю использовать библиотеку ввода более высокого уровня для обнаружения нажатий клавиш.Если вы хотите сделать это с нуля, выбранный подход может варьироваться в зависимости от конкретной платформы, для которой вы программируете.

В любом случае, еще во времена TURBO C я использовал -

//Wait for keypress
//store input in ch  
//see if the ASCII code matches the code for one of the arrow keys  
0 голосов
/ 03 февраля 2010

переменные типа char обычно представляют элементы в таблице ASCII.
http://www.asciitable.com/
также есть man ascii в unix.Если вам нужны клавиши со стрелками, вам нужен более прямой способ доступа к вводу с клавиатуры.клавиши со стрелками переводятся в последовательности символов, прежде чем нажать stdio.Если вам нужен прямой доступ с клавиатуры, рассмотрите библиотеку графического интерфейса, sdl, прямой ввод, чтобы назвать несколько.

...