^ [[Символьная комбинация - PullRequest
       4

^ [[Символьная комбинация

4 голосов
/ 01 октября 2009

В Unix, когда я нажимаю клавишу со стрелкой вверх, она показывает эту строку, но во время scanf не принимает ее в качестве ввода. Пожалуйста, объясните, как принять это в качестве входных данных. Можем ли мы что-то вроде сравнения символа по характеру, например first ^ [- это клавиша Esc и так далее?

1 Ответ

7 голосов
/ 01 октября 2009

Это управляющая последовательность, сгенерированная этим ключом. '^[' - это CTRL-[ (символ ESC), а два других символа - '[' и 'A'.

Если вы хотите обработать их, вам нужно прочитать все три символа и решить, что они означают, что пользователь нажал клавишу со стрелкой вверх.

То, можете ли вы сделать это с помощью scanf, зависит от строки формата. Для этого я бы использовал более низкий уровень ввода символов.

I никогда использовать [f]scanf в реальном коде, поскольку в результате сбоя вы не знаете, где находится входной указатель. Я считаю, что для линейного ввода всегда лучше использовать fgets, а затем sscanf полученную строку.

Но, как я уже сказал, вы должны использовать getc и его братьев для низкоуровневого ввода / вывода символов. Или найдите функцию более высокого уровня, такую ​​как readline под Linux, или другие библиотеки, которые знают, как преобразовать ее в специальные коды клавиш, такие как VK_KEY_UP, которые вы можете обрабатывать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...