getch () для захвата Ctrl- * буквы * в Linux

Я решил использовать getch из conio.h на Linux. Я слышал, что это не рекомендуется, но сейчас мне нужно решение, а позже я буду совершенствовать свои навыки программирования.

Я прочитал несколько учебников о том, как войти один ключ и программа что-то сделает. Такие как:

printf("Press any key\n");
c = getch();
if (c)
printf(" A key is pressed from keyboard ");
else
printf("An error occurred ");

Однако, если я хочу использовать Enter Ctrl+Е чтобы напечатать ‘Ctrl был проведен с ключом’. Как бы я обойти это делать?

1

Решение

getch() это функция, найденная в Windows в #include <conio.h> или на Unix в #include <curses.h>, Вы хотели позвонить одному из них? Это не функция, определенная в стандарте C (стандартные функции getc() а также getchar(), конечно). Если вы используете функцию из <curses.h>Вам нужно сначала выполнить инициализацию, а потом завершить.

Предполагая, что вы решите вопрос о том, какую функцию вы планируете вызывать, вы обнаружите, что управляющие символы — это номер 1..26:

  • Контроль-A знак равно 1
  • Control-Z знак равно 26

Возможно, вам придется сделать некоторые переводческие работы на getch() от <curses.h> — он возвращает интересные значения для функциональных клавиш и других специальных нажатий клавиш и может не возвращать то, что вы ожидаете от управляющих клавиш.

Кроме того, ваш драйвер терминала может сбить вас с толку, интерпретируя различные символы для вас (особенно если вы используете getchar() или же getc()). Например, Control-D скорее всего, будет рассматриваться как EOF; Control-H вероятно, будет возврат или стереть; Control-C скорее всего, будет прерывание; а также Control-Z скорее всего, будет «приостановить» (имеется в виду «вернуться в оболочку, не выходя из текущей программы — просто приостановить ее временно»). Другие клавиши управления имеют другие значения. Вы можете часто получить «подлинное» значение, набрав Контроль-VControl-Z, например — используя Контроль-V подавить особое значение следующего символа.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector