getchar() unter Unix ohne enter
-
Hallo,
Ich arbeite mit C unter einem Unix System.
Meine Frage ist, wie kann ich ein einzelnes Zeichen einlesen ohne entre drücken zu müssen?
Ich weiß das man unter Windows einfach
if(kbhit()) getchar();
machen kann.
Ich habe Google schon durchsucht, und bis auf eigene Funktionen anzulegen die kbhit realisieren nichts gefunden. Gibt das unter Unix eine elegantere Lösung dafür?
Danke für antworten
-
Die meisten der Nachbaufunktionen benutzen
curses
bzw.ncurses
.Diese Bibliothek kannst du auch selber direkt nutzen. Ist halt etwas Aufwand.
-
Danke für deine Antwort.
Weißt du auch direkt welche Funktion aus der ncurses Bibliothek mir weiter hilft?
-
Einfach nur:
#include <curses.h> int main(){ char x; x=getch(); printf("%c",x); return 0; }
?
-
Probier es aus.
Und schau mal bei http://stackoverflow.com/questions/905060/non-blocking-getch-ncurses rein.
getch
liefert nicht ohne Grund ein int zurück: http://linux.die.net/man/3/getch
Die Fehlercodes passen nicht in einchar
.
-
Hallo,
ich habe auch noch mal ein wenig weiter geschaut und gefunden das man das [enter] auch einfach unterdrücke kann, nämlich mit stty:
#include <stdio.h> int main(){ char c; system("/bin/stty raw"); c=getchar(); system("/bin/stty cooked"); printf("\n%c",c); return 0; }
getchar() ist so implementiert, dass das Zeichen erst in den Puffer geschrieben wird und nach Enter aus dem Puffer genommen und weiter verarbeitet wird. Das entspricht der Standardverhalten von Eingaben bei UNIX-Systemen. Man kann das ganze allerdings unterdrücken, indem man dem Programm die zwei system() ergänzt.
Durch das erste system() wird das Standardverhalten unterdrückt und durch dsa zweite wieder auf das normale Verhalten zurückgesetzt.
Habe das mal getestet, es läuft!