Auf Unix-ähnlichen Systemen mit Terminals (ich nehme an, dass MacOS X dafür in Frage kommt), müssen Sie das Terminal in den sogenannten "cbreak" Modus setzen. Der Punkt ist, dass das -Terminal die Daten beibehält, bis "return" gedrückt wird, so dass es nichts gibt, was Ihr C-Code tun kann, es sei denn, es weist das Terminal an, eine solche Pufferung nicht durchzuführen. Dies wird oft als "cbreak mode" bezeichnet und beinhaltet die Funktion tcsetattr()
.
Ein bisschen Googlen fand diesen Code , der in Ordnung scheint. Sobald sich das Terminal im Cbreak-Modus befindet, können Sie Daten lesen, wie sie mit den Standardaufrufen getchar()
oder fgetc()
geliefert werden.
Wenn Sie selbst mit den Details umgehen müssen, verwenden Sie eine Curses-Variante. Wenn es verfügbar ist, bevorzugen Sie "ncurses" gegenüber "curses". Beachten Sie, dass einige Schlüssel "Meta" -Schlüssel sind, die wirklich nur die Basisschlüsselcodes ändern. Es gibt verschiedene "Modi" zum Lesen der Tasteneingabe, die von "gekocht" über "teilweise gekocht" bis "roh" reichen. Jeder Modus hat seine eigenen Besonderheiten, lesen Sie die Dokumentation sorgfältig.
Manchmal ist es besser, den vorhandenen Key-Handling-Code aus verschiedenen Spiele-Programmierbibliotheken zu verwenden. Ich habe von einigen guten Ergebnissen mit den SDL-Scan-Loops gehört. Das war eine Weile zurück, also vielleicht neuere (und bessere) Toolkits existieren.