ein zeichen aus tastaturpuffer ohne blockierung lesen



  • gutn morgen.

    ich möchte gerne eine schleife so lange ausführen bis eine taste gedrückt wird. in der schleife soll allerdings etwas passieren, also darf die abfrage aus dem tastaturpuffer nicht blockieren. es handelt sich hierbei um eine konsolenanwendung. habe getch(), scanf() und fgets() probiert aber die blockieren alle. bin zwar noch auf die blöde idee gekommen den tastaturpuffer per open() zu öffnen und dann zu lesen, aber das ist bestimmt viel zu umständlich.

    [EDIT]
    ach was ich vergessen hab:
    das ganze sollte auch unter UNIX laufen können. (habe dann natürlich falsches unterforum getroffen, sry dafür könnt ihr gerne verschieben. die frage will eine kollege wissen, daher konnte ich das net von vornerein wo anders posten)
    [/EDIT]

    danke im voraus

    MfG Radiatio2k5 🙂



  • Um eine Taste abzufragen mußt du "if(Key == 13)" 13=ENTER in's OnKeyUp-Ereignis schreiben.

    Sorry, hab nicht gesehen, dass du auf Konsole schreibst.



  • Die Funktion kbhit liefert ungleich Null, wenn etwas im Tastaturpuffer steht, ansonsten NULL.

    MS Hilfe schrieb:

    int _kbhit( void );
    Return Value
    _kbhit returns a nonzero value if a key has been pressed. Otherwise, it returns 0.



  • danke für die antwort. allerdings habe ich nachgesehen und gemerkt das diese funktion nur in win32 funktioniert, in meinem edit stand aber das die auch unter UNIX laufen sollte.

    MfG Radiation2k5



  • mein kollege hat doch was in ner alten doku gefunden, das funktioniert.

    wer es mal brauchen kann: (funktioniert auch unter UNIX)

    #include <termios.h> 
    
    int kbhit(void) { 
            struct termios term, oterm; 
            int fd = 0; 
            int c = 0; 
            tcgetattr(fd, &oterm); 
            memcpy(&term, &oterm, sizeof(term)); 
            term.c_lflag = term.c_lflag & (!ICANON); 
            term.c_cc[VMIN] = 0; 
            term.c_cc[VTIME] = 1; 
            tcsetattr(fd, TCSANOW, &term); 
            c = getchar(); 
            tcsetattr(fd, TCSANOW, &oterm); 
            if (c != -1) 
            ungetc(c, stdin); 
            return ((c != -1) ? 1 : 0); 
    }
    

Anmelden zum Antworten