005
10.09.2008, 21:40 Uhr
0xdeadbeef
Gott (Operator)
|
Der Grund für das Verhalten ist, dass nach dem Auslesen der Zahl noch Reste im Stream sind. Wenn du zum Beispiel 2 eingibst und Enter drückst, befindet sich in der Standardeingabe des Prozesses (std::cin) die Zeichenkette "2\n" (\n hier symbolisch für das newline-Zeichen).
liest die 2 da raus, lässt aber das newline stehen - es gehört ja nicht mehr zur Zahl. Es ist auch ganz gut, dass sich das so verhält, weil es für eine gewisse Orthogonalität sorgt - die Standardeingabe wird nicht anders behandelt als eine Datei, was sie ja unter vielen Umständen auch ist. Jedenfalls,
ignoriert dann ein Zeichen aus der Standardeingabe, also das newline-Zeichen, und weil es damit befriedigt ist, wartet es natürlich auch nicht mehr.
Es gibt verschiedene Wege, damit umzugehen. Ich verarbeite Eingaben, wenn ich Benutzereingaben auf der Konsole erwarte, zeilenweise (siehe www.fun-soft.de/showtopic.php?threadid=19851 ), andere benutzen nach jeder Eingabe
C++: |
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
|
um den Rest der Zeile zu ignorieren. Auf jeden Fall müssen die Reste aus dem Stream entfernt werden, bevor das Lesen aus std::cin auf neue Eingaben wartet. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |