Получить ввод с клавиатуры без "возврата" в C
Как я могу получить ввод с клавиатуры, не нажимая "возврат" в C / Mac Os
3 ответа
В Unix-подобных системах с терминалами (я полагаю, что MacOS X подходит), вам необходимо установить терминал в так называемый режим "cbreak". Дело в том, что терминал хранит данные до тех пор, пока не будет нажата кнопка "return", так что ваш код на C ничего не может сделать, если только он не проинструктирует терминал не выполнять такую буферизацию. Это часто называют "режимом взлома" и включает в себя tcsetattr()
функция.
Немного поиска в Google нашел этот код, который кажется нормальным. Как только терминал перейдет в режим cbreak, вы сможете читать данные, как это идет со стандартным getchar()
или же fgetc()
звонки.
Если вам нужно разобраться с деталями самостоятельно, используйте вариант проклятия. Если это возможно, предпочтите "ncurses" вместо "curses". Обратите внимание, что некоторые клавиши являются мета-ключами, которые на самом деле просто изменяют коды базовых клавиш. Существует несколько "режимов" для считывания ввода с клавиатуры, которые варьируются от "приготовленного" до "частично приготовленного" до "сырого". Каждый режим имеет свои особенности, внимательно прочитайте документацию.
Иногда лучше использовать существующий код обработки ключей из различных библиотек программирования игр, я слышал о некоторых хороших результатах, используя циклы сканирования ключей SDL. Это было некоторое время назад, поэтому, возможно, существуют более новые (и лучшие) наборы инструментов.