Получить ввод с клавиатуры без "возврата" в C

Как я могу получить ввод с клавиатуры, не нажимая "возврат" в C / Mac Os

3 ответа

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

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

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

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

Другие вопросы по тегам