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

0

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

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

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

благодаря

  • 0
    Функция getchar() может получить один символ, но не получит (по умолчанию) ответ, пока не будет нажата клавиша возврата. Вы должны отключить буферизацию, чтобы обойти это ограничение, однако ваш вопрос предполагает, что вам не разрешено это делать, то есть вы не можете выполнить это назначение.
  • 0
    Похоже, ответ «не может быть сделано», но если это задание, проф, вероятно, что-то имел в виду. Может быть, вставить инструкции, чтобы кто-то мог понять их для вас.
Показать ещё 3 комментария
Теги:
getch

2 ответа

2

Библиотечный подход к UNIX - это для нас ncurses, но это немного фреймворк, который не совсем тривиально настраивается. tcsetattr() режим состоит в том, чтобы превратить стандартный входной поток в неканонический режим ввода с помощью tcgetattr() и tcsetattr() с файловым дескриптором 0. Набрав необходимый код из памяти (т.е. Я не могу проверить его сейчас, и я, вероятно, забыл что-то важное), соответствующий код выглядит примерно так:

struct termios setings;
tcgetattr(0, &settings);
settings.c_lflags &= ~ICANON;
tcsetattr(0, &settings);

Очевидно, что реальная реализация проверит, что системные вызовы действительно успешны. Обратите внимание, что после этого кода std::cin и stdin будут немедленно реагировать на нажатия клавиш. В качестве прямого следствия пройдут все виды "смешных" персонажей. Например, когда используется клавиша удаления, вы увидите обратные символы (ctrl-H, char(7)).

  • 0
    Я хотел бы понять слово, которое вы написали. Я только на моем первом проклятии, и мы не изучили «termios». Более того, я не могу использовать его, как я уже сказал.
  • 0
    Что ж, если вы не можете использовать <termio.h> (или библиотечную оболочку, похожую на ncurses), вы не получите установку, которая не ожидает клавишу ввода! Что ж, я думаю, что вы можете разыгрывать трюки на оболочке или читать псевдотермические сообщения, но это будет сложнее, чем использование tcgetattr() и tcsetattr() .
Показать ещё 2 комментария
1

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

  • 0
    Я знаю об этом, но правила ввода присваивания таковы, что требуют получения буквально таких символов.
  • 5
    Тогда ваше назначение невозможно. Мне очень жаль.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню