Я написал код на Windows, используя функцию getch()
от stdio
, Дело в том, что я должен использовать функцию ввода, которая не требует нажатия Enter.
Мой код компилируется и отлично работает на Windows. Тем не менее, это назначение должно выполняться на Linux, и когда я пытаюсь сделать это, он говорит мне, что он не распознает getch()
(или же _getch()
).
Проблема в том, что в соответствии с заданием, я не могу использовать другие, но включает stdio.h
(и то же самое касается добавления флага), поэтому я не могу использовать curses.h
чтобы решить это.
Я тоже не могу использовать termios.h
и так далее, мы этого не узнали.
Как я могу решить это? Есть ли другие варианты?
Спасибо
Библиотечный подход на UNIXes для нас Ncurses но это что-то вроде фреймворка, который не совсем тривиален в настройке. Небиблиотечный режим должен превратить стандартный поток ввода в неканонической режим ввода с использованием tcgetattr()
а также tcsetattr()
с файловым дескриптором 0
, Набирая необходимый код из памяти (то есть я не могу сейчас его протестировать и, вероятно, забыл что-то важное), соответствующий код выглядит примерно так:
struct termios setings;
tcgetattr(0, &settings);
settings.c_lflags &= ~ICANON;
tcsetattr(0, &settings);
Очевидно, что реальная реализация будет проверять, что системные вызовы действительно успешны. Обратите внимание, что после этого кода std::cin
а также stdin
будет немедленно реагировать на нажатия клавиш. Как прямое следствие, все виды «забавных» персонажей будут проходить через. Например, когда используется клавиша удаления, вы увидите символы возврата (ctrl-H, char(7)
) объявиться.
Мы не делаем чудес в Linux. Вы либо используете другие вещи, кроме stdio.h
или обойтись без какого-либо эквивалента getch
и зависит от нажатия Enter.