2012-05-14 7 views

Antwort

13

cin.ignore verwirft Zeichen bis zur angegebenen Nummer oder bis das Trennzeichen erreicht ist (falls vorhanden). Wenn Sie es ohne Argumente aufrufen, verwirft es ein Zeichen aus dem Eingabepuffer.

Zum Beispiel ignoriert cin.ignore (80, '\n') entweder 80 Zeichen oder so viele wie es gefunden wird, bis es einen Zeilenumbruch erreicht.

cin.sync verwirft alle ungelesenen Zeichen aus dem Eingabepuffer. Dies ist jedoch nicht bei jeder Implementierung garantiert. Daher ist ignore eine bessere Wahl, wenn Sie Konsistenz wünschen.

cin.sync() würde nur löschen, was übrig ist. Die einzige Anwendung ich für sync() denken kann, die nicht mit ignore ist ein Ersatz für system ("PAUSE"); getan werden kann:

cin.sync(); //discard unread characters (0 if none) 
cin.get(); //wait for input 

Mit cin.ignore() und cin.get(), das ist ein bisschen eine Mischung sein könnte:

cin.ignore (std::numeric_limits<std::streamsize>::max(),'\n'); //wait for newline 
//cin.get() 

Wenn ein Zeilenumbruch übrig geblieben ist, wird ignore einfach übersprungen. Das Setzen beider wartet jedoch auf zwei Eingaben, wenn keine neue Zeile vorhanden ist. Das Verwerfen von allem, was nicht gelesen wird, löst dieses Problem, ist aber wiederum nicht konsistent.

+0

können Sie mir spezifische Implementierungen zeigen, die cin.sync nicht sicher sind! – 5fox

+1

@ 5fox: Ich kann Ihnen Implementierungen zeigen, wo es nichts macht: http://ideone.com/AR8lB –

+0

ignore() sollte vor cin oder nach cin aufgerufen werden? Um genau zu sein, muss ich zum ersten Mal, wenn ich für cin gehe, unerwünschte Daten im Puffer spülen, wenn überhaupt? Oder wird Programm alles spülen, wenn main eingegeben wird? Aber was ich bemerkte, ist, dass wenn wir ignore() aufrufen, es erstmalig auf ein Leerzeichen wartet. – Rajesh

Verwandte Themen