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 ein char .



  • 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!


Anmelden zum Antworten