Я решил использовать 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 был проведен с ключом’. Как бы я обойти это делать?
getch()
это функция, найденная в Windows в #include <conio.h>
или на Unix в #include <curses.h>
, Вы хотели позвонить одному из них? Это не функция, определенная в стандарте C (стандартные функции getc()
а также getchar()
, конечно). Если вы используете функцию из <curses.h>
Вам нужно сначала выполнить инициализацию, а потом завершить.
Предполагая, что вы решите вопрос о том, какую функцию вы планируете вызывать, вы обнаружите, что управляющие символы — это номер 1..26:
1
26
Возможно, вам придется сделать некоторые переводческие работы на getch()
от <curses.h>
— он возвращает интересные значения для функциональных клавиш и других специальных нажатий клавиш и может не возвращать то, что вы ожидаете от управляющих клавиш.
Кроме того, ваш драйвер терминала может сбить вас с толку, интерпретируя различные символы для вас (особенно если вы используете getchar()
или же getc()
). Например, Control-D скорее всего, будет рассматриваться как EOF; Control-H вероятно, будет возврат или стереть; Control-C скорее всего, будет прерывание; а также Control-Z скорее всего, будет «приостановить» (имеется в виду «вернуться в оболочку, не выходя из текущей программы — просто приостановить ее временно»). Другие клавиши управления имеют другие значения. Вы можете часто получить «подлинное» значение, набрав Контроль-VControl-Z, например — используя Контроль-V подавить особое значение следующего символа.
Других решений пока нет …