std::cin Wie leert man den Puffer richig?
-
Hallo,
ich entwickle eigentlich mit Codeblocks, habe aber folgendes Problem:
Ich muss den Puffer leeren, damit das "ENTER" verschwindet.
std::cin >> mode; // Eingabe wird mit ENTER bestätigt, welches dann noch rumschwirrt //ENTER aus Puffer entfernen std::cin.ignore(); // anschließend string einlesen std::getline ( std::cin, string) ;Mit dem MinGW Compiler von Codeblocks hat sowohl cin.get(), als auch cin.ignore() funktioniert.
Wenn ich das gleiche Proejekt nun mit Visual C++ Version 6.0 übersetze, führen oben besagte Methoden dazu, dass ich meine string-Eingabe zweimal mit ENTER besätigen muss.
Wenn ich im VisualC++ stattdessen cin.clear() aufrufe, klappt alles.
Dafür ist dann in Codeblocks das cin.clear() wirkungslos, bzw meine string-eingabe wird einfach übergangen, ohne dass ich die Möglichkeit habe etwas einzugeben.
Wie ist der Puffer nun korrekt zu leeren, damit das mit beiden compilern die gleichen Resultate hat?
-
clear() setzt nur die Fehlerflags zurück (wenn welche gesetzt waren), ignore(n,c) entsorgt Zeichen aus dem Eingabepuffer (bis es entweder n Zeichen gelöscht hat oder auf das Zeichen c stößt)*. Also sollte die Lösung mit ignore() eigentlich das machen, was du erwartest - zur Sicherheit könntest du nur etwas andere Werte angeben:
cin.ignore(std::numeric_limits<size_t>::max(),'\n');.*Defaultwerte sind n=1 und c=EOF
-
Mit codeblocks compiliert habe ich somit (cin.ignore(std::numeric_limits<size_t>::max(),'\n') ) jetzt den Effekt, dass ich wieder den String nicht eingeben kann.
Visual C++ scheint den Puffer damit nicht zu leeren, da ab der Stringeingabe gar keine Eingabe mehr möglich ist (std::cin >> mode hat dann immer schon einen Wert)
-
Was hast du dem Programm denn für die cin>>mode Eingabe zu schlucken gegeben? Wenn dort Buchstaben gekommen sind (und mode ein int-Wert ist), schaltet der Stream das failbit ein - und verweigert vorübergehend die Zusammenarbeit, bis du es zurückgesetzt hast.
-
CStoll schrieb:
Was hast du dem Programm denn für die cin>>mode Eingabe zu schlucken gegeben? Wenn dort Buchstaben gekommen sind (und mode ein int-Wert ist), schaltet der Stream das failbit ein - und verweigert vorübergehend die Zusammenarbeit, bis du es zurückgesetzt hast.
mode ist ein integer und es wurde auch nur eine Zahl und ENTER eingegeben.