Получить ввод с клавиатуры без «возврата» в C - PullRequest
8 голосов
/ 31 марта 2010

Как получить ввод с клавиатуры, не нажимая клавишу «возврат» в ОС C / Mac

Ответы [ 3 ]

5 голосов
/ 31 марта 2010

В Unix-подобных системах с терминалами (я полагаю, что MacOS X подходит), тогда вам нужно установить терминал в так называемый режим "cbreak". Дело в том, что терминал хранит данные до тех пор, пока не будет нажата кнопка «return», так что ваш код на C ничего не может сделать, если он не проинструктирует терминал не выполнять такую ​​буферизацию. Это часто называют «режимом прерывания» и включает функцию tcsetattr().

Немного погуглил, нашел этот код , который кажется нормальным. Как только терминал перейдет в режим cbreak, вы сможете читать данные, как они поступают со стандартными вызовами getchar() или fgetc().

2 голосов
/ 31 марта 2010

Если вам нужно разобраться с деталями самостоятельно, используйте вариант проклятия. Если это возможно, предпочтите «ncurses» вместо «curses». Обратите внимание, что некоторые клавиши являются мета-ключами, которые на самом деле просто изменяют коды основных клавиш. Существует несколько «режимов» для считывания ввода с клавиатуры, которые варьируются от «приготовленного» до «частично приготовленного» до «сырого». Каждый режим имеет свои особенности, внимательно прочитайте документацию.

Иногда лучше использовать существующий код обработки ключей из различных библиотек программирования игр, я слышал о некоторых хороших результатах с использованием циклов сканирования ключей SDL. Это было некоторое время назад, поэтому, возможно, существуют более новые (и лучшие) наборы инструментов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...