Hilfsfunktion zum Eingabepuffer leeren



  • hi 🙂 ,
    ich brauche eine Funktion, die den Eingabepuffer leert. So weit so gut.
    Allerdings soll, bei schon bereits leerem Puffer auf das Drücken der Return-Taste gewartet werden und das ist mein Problem.

    Man kann den Puffer z.B. mit getchar() leeren und man kann mit getchar() die Programmausführung pausieren, deshalb habe ich geschrieben:

    void ClrStdin( void ) {             /* Hilfsfunktion: Eingabepuffer leeren */
    
      printf("\n\n weiter mit [return]:");
      getchar();    /* Eingabepuffer leeren                                    */
      getchar();    /* Programm anhalten                                       */
    }
    

    Aber wenn jetzt der Puffer schon von Anfang an leer ist, dann wird durch das zweimal getchar() bewirkt, dass das Programm auch zweimal auf die Return-Taste wartet.
    Also muss doch erst geprüft werden ob was im Eingabepuffer ist oder nicht, nur wie stelle ich das an? 😮 😕

    Gruß
    Johann





  • Hi,

    Johann2 schrieb:

    Man kann den Puffer z.B. mit getchar() leeren ...

    ein getchar Aufruf allein reicht nicht, wenn mehrere Zeichen im Puffer übrig sind. Dazu braucht man eine Schleife. Das kann aber Probleme geben, wenn der Puffer geleert werden soll, aber nichts im Puffer ist - dann wird nämlich ungewollt auf eine Eingabe gewartet.

    Obige Probleme hast du mit dieser Funktion nicht, die den Puffer leert:

    void cb() { // Clear buffer :)
        setvbuf ( stdin, NULL, _IONBF, 0 ); 
        setvbuf ( stdin, NULL, _IOFBF, BUFSIZ ); 
    }
    
    void wait() { // Wartet auf Return Tastendruck.
        cb(), getchar(), cb(); // Funktion wird mit leerem Puffer verlassen.
    }
    

    Gruß,
    B.B.


Anmelden zum Antworten