Do/While - Schleife funktioniert nicht wie gewünscht [GELÖST]
-
Hallo Leute!
Habe ein kleines Problem mit einer Do/While-Schleife. Ich habe vor kurzem erst mit dem Programmieren angefangen und bin mir daher nicht sicher, ob das Problem nicht ganz einfach ergooglebar wäre, ich kann es jedenfalls noch nicht suchmaschinentauglich beschreiben, finde leider nur Themen die es entweder ganz im Allgemeinen ansprechen oder zu spezifisch - beides hat mir nicht geholfen.
Deswegen jetzt hier meine Frage: Ich möchte in nachfolgendem Code die Laune des Benutzers abfragen. Mögliche Antworten, die zum Ende des Programms führen sind "Gut" bzw. "Schlecht". Gibt der Nutzer etwas anderes ein, so soll er die Möglichkeit bekommen, das ganze zu wiederholen, bis er die Eingabe richtig tätigt.
Das würde ich ganz gerne mit do/while machen, nur klappt es anscheinend mit der Bedingung für das Wiederholen der Schleife nicht:#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string> #include <windows.h> using namespace std; int main(int argc, char** argv) { // Variablen Anfang string mood; int mood1; // Variablen Ende cout << "Hallo! Sch\x94n von Dir zu h\x94ren! Wie geht es Dir?\n"; cin >> mood; do { if(mood=="Gut") { cout << "Freut mich, dass es Dir gut geht!\n"; mood1 = 0; } else if(mood=="Schlecht") { cout << "Ohje, das ist aber schade!\n"; mood1 = 0; } else cout << "Tut mir Leid, Deine Eingabe ist nicht zu verstehen!\n"; mood1 = 1; }while (mood1!=0); system("PAUSE"); return 0; }
Egal was ich nun also eingebe, das Programm gibt mir unendlich oft eine der möglichen cout-Angaben aus.
Muss ich etwas an der while-Bedingung ändern, also an der Variable mood1 oder ist diese Variable überhaupt überflüssig?Vielen Dank schonmal vorweg!
Whitebeer
-
Wie viele Anweisungen gehören zu einem else? Und sagen Einrückungen irgendetwas aus?
-
Zu den if/else if/else gehören jeweils die zwei Anweisungen cout, also das, was ausgegeben werden soll sowie die Veränderungen der Variable mood1.
Muss ich bei mehr als einer Anweisung Klammern darum setzen?Und die Einrücken sind der Übersichtlichkeit halber.
-
Whitebeer schrieb:
Muss ich bei mehr als einer Anweisung Klammern darum setzen?
Jupp, denn:
Und die Einrücken sind der Übersichtlichkeit halber.
Woher soll der Compiler sonst wissen, was nicht mehr dazu gehört?
-
Whitebeer schrieb:
...
Muss ich bei mehr als einer Anweisung Klammern darum setzen?
...Si, Sanchez!
Und du solltest dir angewöhnen, Variablen sofort zu initialisieren (mood1 in Zeile 14).Edit:
Und du solltest dir ebenfalls den Umgang mit dem Debugger angewöhnen. Damit hättest du ziemlich fix herausgefunden, wo der Fehler liegt.
-
Außerdem sollte die Eingabe wohl auch innerhalb der Schleife, sonst kann der Anwender ja nicht mehr etwas anderes eingeben
-
Ich weiss nicht, woher du dieses
// Variablen Anfang ... // Variablen Ende
hast, aber das solltest du auf jeden Fall schnell abgewöhnen.
-
So, habe das Problem nun gelöst - Problem lag wohl hauptsächlich darin, dass die Eingabe nicht in der Schleife war. Vielen Dank an Euch alle!
PS: Werde versuchen, Eure Tipps bzgl. An-und Abgewöhnung einzuhalten, dürfte nicht so schwer sein, mach das ja erst seit 2 Tagen.
Lieben Gruß!