Вопрос:
Сначала я написал крошечную программу на Ansi C для Windows и скомпилировал ее в Ubuntu со встроенным GCC.
Программа проста:
- читать строку из консоли с scanf().
- Проанализируйте строку и рассчитайте.
Но происходит нечто странное. Когда я пытаюсь переместить курсор, он печатает четыре символа:
- нажатие Up печатает “^[[A“
- нажатие Dn печатает “^[[B“
- нажатие Rt печатает “^[[C“
- нажатие Lt печатает “^[[D“
-
Как этого можно избежать?
-
Почему он печатает эти 4 символа вместо перемещения курсора?
Лучший ответ:
Потому что то, что клавиатура фактически отправляет на ПК (точнее, что терминал печатает для того, что он фактически получает с клавиатуры). bash, например, получает эти значения, расшифровывает их и понимает, что вы хотите перемещаться, поэтому он будет либо перемещать курсор (в случае левого/правого), либо использовать его историю для извлечения предыдущих команд (вверх/вниз). Таким образом, вы не можете ожидать, что ваша программа магически поддерживает клавиши со стрелками.
Однако, чтение со стандартного ввода с терминала уже поддерживает клавиши со стрелками влево/вправо (я полагаю, но я не сейчас в Linux, чтобы проверить и убедиться). Поэтому я предполагаю, что есть другая проблема. Одна из возможных причин может заключаться в том, что один из ваших ключей-модификаторов застрял? Возможно, ALT, CTRL или SUPER?
Ответ №1
Для тех, кто идет из osx (mac), попробуйте изменить оболочки на bash
Terminal -> Preferences -> Shells open with -> [select] Command (complete path)
затем вставьте
/bin/bash
Ответ №2
Просто введите $ bash в терминале. Это решит проблему.