Warum läuft dieses Programm mit Eingabewert nicht gleich Datentyp int????
-
Hallo, ich habe zum Üben gerade folgende do - while - Schleife programmiert:
#include <iostream> int main() { int counter; std::cout << "Wie viele Hellos?: "; std::cin >> counter; do { std::cout << "Hello!\n"; counter--; } while (counter > 0); std::cout << "counter: " << counter; return 0; }für counter = 2 ist das Resultat:
C:\Dokumente und Einstellungen\Thomas Zettler\cbproject\bodyskip\windows\Release_Build\bodyskip.exe
Wie viele Hellos?: 2
Hello!Hello!
counter: 0
... das ist erwartungsgemäß.
Für counter = t (nicht Element int / Ganzzahl) erwartete ich zu Übungszwecken einen Computer und / oder Programmabsturz.
Hier aber das unerwartete Ergebnis:
C:\Dokumente und Einstellungen\Thomas Zettler\cbproject\bodyskip\windows\Release_Build\bodyskip.exe
Wie viele Hellos?: t
Hello!Hello!
Hello!
Hello!
Hello!
usw. bis in alle Ewigkeit.
Warum löst "t" nicht Element von int überhaupt eine Schleifenausführung aus? ist t nicht Element von char? ich dachte ich kann nur 1,2, 3, ... , n usw. eingeben.
Bitte um Rätsellösung. bin newbie.
LG kasimirle
-
Das Problem ist dass Du nicht überprüfst, ob die Eingabe einer Zahl erfolgreich war. Wenn Du nämlich keine Zahl eingibst schlägt (cin >> counter) fehl und counter bleibt unverändert. Und da Du counter vorher nicht initialisiert hast, steht da ein beliebiger Wert drin.
D.h. Du hast zwei Möglichkeiten: Resultat der Eingabe abfragen oder counter vorher mit 0 initialisieren.
if (std::cin >> counter) { do { std::cout << "Hello!\n"; counter--; } while (counter > 0); }
-
LordJaxom schrieb:
...
D.h. Du hast zwei Möglichkeiten: Resultat der Eingabe abfragen oder counter vorher mit 0 initialisieren.if (std::cin >> counter) { do { std::cout << "Hello!\n"; counter--; } while (counter > 0); }Wobei in diesem Fall das "Initialisieren mit 0" nur gewünscht arbeitet, wenn man die Schleife von do-while in while-do umbaut.
Gruß,
Simon2.