lcc-win32: warum funktioniert kbhit() hier nicht richtig?



  • Dieses Programm sollte mir dienen, herauszubekommen, wie ich feststellen kann, ob und welche Taste gerade gedrückt ist. Doch das funktioniert nicht so, wie ich erwartet habe.

    Warten auf die Eingabe ist erforderlich, damit ich überhaupt testen kann. Sonst beendet sich das Programm sofort. Aber es beendet sich auch, wenn ich den Sleep rausnehme, obwohl ich die Taste nicht loslasse. Es zeigt mir dann genau einmal ein Zeichen an. Warum tut es das?

    int eingabe;
    int main()
    {
    // warte auf drücken einer Taste
       while(!kbhit());
    // solange die Taste gedrückt gehalten wird...
       while(kbhit())
           {
    // Zeichen der Taste abholen
               eingabe = getch();
    // Zeichen wieder ausgeben
               printf ("%c",eingabe);
    // Tastaturpuffer leeren
               fflush(stdin);
    // Warum ist diese Anweisung erforderlich?
               sleep(400);
           }
       return 0;
    }
    

    Noch eine Ergänzung:
    Am fflush liegt es nicht. Den kann ich auch weglassen.



  • Ich habe es jetzt rausgefunden. Laut Beschreibung soll kbhit() anzeigen, ob eine Taste gedrückt ist. Tut es aber nicht. Es zeigt an, ob Zeichen im Tastaturpuffer sind.

    Dadurch ist auch das Sleep(400) erforderlich. Das nächste Zeichen ist erst im Tastaturpuffer, wenn die Wartezeit für die Verzögerung in der Zeichenwiederholung erreicht ist.


Anmelden zum Antworten