Wie stdin zuverlässig löschen ?



  • Hallo.
    In diesem Beispiel-Code:

    #include <stdio.h>
    
    int main()
    {
        char c;
        float r;
    
        while(1)
        {
    	printf("Eingabe 1:");
    	scanf("%f",&r);
    	//getchar();
    	printf("Eingabe 2:");
    	scanf("%c",&c);
        }    
    
        return 0;
    

    sollen mit scanf 2 Variable eingelesen werden.
    Die erste Eingabe funktioniert zuverlässig, die zweite wird meistens übersprungen (aber nicht immer).

    Der Grund dafür soll sein, dass sich im stdin-Stream noch Zeichen befinden.
    Man kann sich hier helfen indem man eine Anzahl getchar() aufrufe dazwischen setzt, das ist aber eine Frickel-Lösung die nur bedingt funktioniert und selbst ein Problem hervorruft.

    Wenn das wirklich der Grund für solche Probleme ist(was ich mir allerdings, auf Grund meiner beschränkten Kenntnisse, nicht sicher bin), wie kann man dann alle Zeichen aus stdin löschen ?
    Oder kann dieses Problem anders beseitigen ?

    Wäre sehr dankbar für eine Antwort auf diese Frage.



  • #include <stdio.h>
    
    void fflush_input(FILE * inputStream)
    {
     int c;
     while((c = getc(inputStream)) != EOF)
       if(c == '\n') break;
    }
    
    int main()
    {
     fflush_input(stdin);
     return 0;
    }
    


  • Vielen Dank für die Antwort.

    Dein Beispiel beantworten zwar meine Frage korrekt, ich habe aber gemerkt dass ich die Frage falsch formuliert habe bzw. unvollständig.
    Es ist leider so, das diese Lösung im Prinzip das gleiche ist, wie ich es weiter oben beschrieben habe. (also ein paar getchar(); in den Programm-Code einzufügen).
    Wenn aber stdin leer ist, bleibt das Programm stehen bis man Enter druckt.
    Ich habe nach einer lösung gesucht die diesen Schönheitsfehler nicht hat.

    Dennnoch Danke für Deine Mühe.


Anmelden zum Antworten