Eingabepuffer leeren



  • Hi! ich habe ein Programm geschrieben, kod ist richtig, nac dem compilieren erscheint irgendwelche Zahlen die nicht stimmen mit dem was sein soll, dass heißt Eingabepuffer ist nicht Leer? Was soll ich jetzt tun?



  • Ich glaube, das leert den Puffer:

    cin.clear ();
    


  • BitWax schrieb:

    Ich glaube, das leert den Puffer:

    cin.clear ();
    

    Also soweit ich weiß, setzt das nur die Statusflags zurück 😉

    std::cin.clear(); 
    std::cin.ignore(std::cin.rdbuf()->in_avail()); 
    std::cin.get();
    

    Fürfte das sein, was du suchst.

    Wenn es nicht klappt, könnte es helfen, wenn du uns mal etwas Sourcecode und die Ausgabe zeigst.



  • Was du gepostet hast, dient dazu, auf eine Eingabe zu warten. Aber ob es auch den Puffer leert...also wenn dann leert es den Puffer auch ohne cin.get ()



  • Ups, stimmt xD

    as kommt davon, wenn man es einfach kopiert und einfügt ohne nachzudenken 🤡



  • The-Kenny schrieb:

    BitWax schrieb:

    Ich glaube, das leert den Puffer:

    cin.clear ();
    

    Also soweit ich weiß, setzt das nur die Statusflags zurück 😉

    Korrekt !

    The-Kenny schrieb:

    ...
    std::cin.ignore(std::cin.rdbuf()->in_avail()); 
    ...
    

    Fürfte das sein, was du suchst.
    ...

    Fast korrekt !
    leider gibt es im C++-Std keine Möglichkeit, die Anzahl der tatsächliche eingegebene Zeichen auszulesen - auch nicht mit in_avail();
    Das liegt IIRC daran, dass wegen "des Streamcharakters" nicht festgelegt ist, ab wann die Zeichen von der Konsole (= Betriebssystemverantwortung) in den StreamBuffer wandern.
    Bei meinem AIX-GCC liefert in_avail() z.B. immer 1 zurück...

    Hier wurde schon öfter "maxInt" als Parameter für ignore() genommen; da ma nichts verkehrt machen kann, wenn man einen zu großen Wert nimmt, kann man einfach "irgendeinen richtig großen nehmen".

    Gruß,

    Simon2.


Anmelden zum Antworten