Как я получаю вход от клавиатуры, не нажимая 'возврат' в C / Mac OS
В Unix-подобных системах с терминалами (я полагаю, что MacOS X подходит), вам необходимо установить терминал в так называемый режим «cbreak». Дело в том, что терминал хранит данные до тех пор, пока не будет нажата кнопка «return», так что ваш код C ничего не может сделать, если только он не проинструктирует терминал не выполнять такую буферизацию. Это часто называется «режимом cbreak» и включает функцию tcsetattr ()
.
Немного погуглив, нашел этот код , который кажется нормальным. Когда терминал находится в режиме cbreak, вы сможете читать данные, поскольку они идут со стандартными вызовами getchar ()
или fgetc ()
.
Если вам нужно разобраться с деталями самостоятельно, используйте вариант проклятия. Если он доступен, предпочитайте "ncurses" над "curses". Обратите внимание, что некоторые клавиши являются «мета-клавишами», которые на самом деле просто изменяют базовые коды клавиш. Существует несколько «режимов» для чтения введенных с клавиатуры значений: от «приготовленный», «частично приготовленный» до «сырой». Каждый режим имеет свои особенности, внимательно прочтите документацию.
Иногда лучше использовать существующий код обработки ключей из различных библиотек программирования игр. Я слышал о некоторых хороших результатах при использовании циклов сканирования ключей SDL. Это было некоторое время назад, поэтому, возможно, существуют более новые (и лучшие) наборы инструментов.
Из FAQ по comp.lang.c: Как прочитать один символ с клавиатуры, не дожидаясь нажатия клавиши RETURN? Как остановить эхо символов на экране при наборе?