lemon03 schrieb:
Könntest Du das näher erläutern?
Eine genaue Erklärung geht tief in die interne Architektur der Streams rein. Ich glaube, das lasse ich besser mal. Daher lieber mal eine etwas oberflächlichere Erklärung:
Deine C++-Programmumgebung ist wie ein schwarzer Kasten, da geht ein Papierband rein, auf dem stehen Zeichen. Dieses Papierband heißt stdin. Wo die Zeichen herkommen, wie sie auf das Band kamen, wann sie auf das Band kamen, und so weiter, das alles kann das Programm im schwarzen Kasten nicht wissen. Das cin ist ein Objekt in deinem Programm, das lebt auch in dem schwarzen Kasten. Das kann auch nur gucken, welche Zeichen auf dem Papierband stehen. Das cin-Objekt darf einen internen Puffer benutzen, das heißt, es darf ein bisschen im Voraus gucken, was auf dem Band geschrieben steht. cin.sync() weist das Objekt an, alles, was es im Voraus gelesen hat, zu verwerfen.
Aber weder steht fest, ob cin überhaupt intern einen Puffer benutzt oder wie weit es diesen im Voraus füllt. Du hast vermutlich bisher nur unter Windows getestet, da ist (wenn ich mich recht entsinne) bei der gängigsten Implementierung das cin-Objekt recht gierig und liest so weit es nur irgendwie kann. Aber bei anderen Implementierungen muss dies nicht so sein. Und es wird nicht so sein. Die MSVC-Umgebung ist meines Wissens nach die einzige, die das so macht.
Hier ( http://www.cplusplus.com/forum/beginner/45543/ ) wird geschrieben, das Reste im Eingabe-Stream ignoriert werden. std::cin.get() kann dann also nicht wirkungslos "verpuffen"?
Dann musst du eben entscheiden, welche deiner Internetforenquellen vertrauenswürdiger ist. Ich zeige dir aber mal das Beispiel aus dem verlinkten Thread unter einer Unix-Umgebung ausgeführt:
http://ideone.com/Gqe2AV
Laut dem anderen Thread hätte da ja als Ausgabe "Hello,, 1, 2" kommen sollen...
Die Referenz zu istream::sync auf der Seite ist jedoch korrekt und erklärt das Problem:
http://www.cplusplus.com/reference/istream/istream/sync/
Notice that the called function may succeed when no action is performed, if that is the behavior defined for the stream buffer object on synchronization.