используя функцию ввода в C на Linux, без нажатия Enter

Я написал код на Windows, используя функцию getch() от stdio, Дело в том, что я должен использовать функцию ввода, которая не требует нажатия Enter.

Мой код компилируется и отлично работает на Windows. Тем не менее, это назначение должно выполняться на Linux, и когда я пытаюсь сделать это, он говорит мне, что он не распознает getch() (или же _getch()).
Проблема в том, что в соответствии с заданием, я не могу использовать другие, но включает stdio.h (и то же самое касается добавления флага), поэтому я не могу использовать curses.h чтобы решить это.

Я тоже не могу использовать termios.h и так далее, мы этого не узнали.
Как я могу решить это? Есть ли другие варианты?

Спасибо

0

Решение

Библиотечный подход на 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)) объявиться.

2

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

Мы не делаем чудес в Linux. Вы либо используете другие вещи, кроме stdio.hили обойтись без какого-либо эквивалента getch и зависит от нажатия Enter.

1

По вопросам рекламы [email protected]