Endlosschleife ...
-
Hallo , ich hab mit der Grundlagenprogramierung so meine Problemchen.
Ich arbeite unter VS2005 und folgende schleife Funktioniert irgendwie nicht so wie sie soll - heißt im näheren die Abbruchbedingungen funktionieren nicht.
Villeicht kann mir wer sagen woran es liegt , mein Latein am Ende ...[code]do // Ratescheife { cout << zahl << "\n Welche Zahl mag er sich gemerkt haben ? "; cin >> raten; v = v + 1; if (zahl == raten) { win = 1; } else if (zahl < raten) { cout << "\n Die Zahl ist kleiner als "<< raten; } else { cout << "\n Die Zahl ist groesser als "<< raten; } } while(win == 1||v <= 3);[/code]Schonmal vielen Dank im vorraus ...
-
Mhh ... Mal ein wenig Pseudocode.
Im wesentlichen versuchst du, die Schleife so lange ausführen, wie das Spiel gewonnen ist, und beenden, sobald man verliert. Durchaus richtig, aber da müsste die Bedingung "win != 1" heißen. Dafür benutzt man aber bool. Dein Stil sieht mir sehr nach "C+" aus
bool win = false; int tries = 0; while(!win) { cout << zahl << "\n Welche Zahl mag er sich gemerkt haben ? "; cin >> raten; ++v; if(zahl == raten) { win = true; } else if (zahl < raten) { cout << "\n Die Zahl ist kleiner als "<< raten; } else { cout << "\n Die Zahl ist groesser als "<< raten; } if(tries > 2) { cout << "\nSpiel verloren! Richtig währe " << zahl << " gewesen!\n"; break; } }
-
Das was mich ein wenig wundert ist, das er auch nach 3 Versuchen nicht abbricht wie er soll und ich verstehe nicht warum ...
-
warum sollte er? ist ja nicht so, als ob er sich merken würde, wieviele versuche es schon gegeben hat...

-
camper schrieb:
warum sollte er? ist ja nicht so, als ob er sich merken würde, wieviele versuche es schon gegeben hat...

macht er doch?
v = v + 1;Ich nehme mal an, dass v für Versuche steht, oder?
-------
do // Ratescheife { cout << zahl << "\n Welche Zahl mag er sich gemerkt haben ? "; cin >> raten; v = v + 1; if (zahl == raten) { win = 1; } else if (zahl < raten) { cout << "\n Die Zahl ist kleiner als "<< raten; } else { cout << "\n Die Zahl ist groesser als "<< raten; } } while(win != 1||v <= 3); // while win != 0 , weil soll ja solange laufen, bis win eins istWenn man die Zahl rät, wird win auf 1 gesetzt und die Schleife wird verlassen, weil win (1) == 1, und nicht mehr != 1.
-
Nimm ein && statt ||.
-
also dann aber while (win == 0 && v <= 3)
-
hmm das mit dem UND (&&) statt ODER (||) begreif ich nicht ganz warum das nur so klappt. Ich würde es verstehen wenn er erst nach 3 versuchen (ja v = versuche) abbricht aber das tut er ja auch nicht. Egal ob ich richtig rate oder nicht ...
-
Vermutlich weil win schonmal 1 geworden ist... Dann kannst Du so oft falsch raten wie du willst, die linke Hälfte von (win == 1 || ...) ist immer erfüllt.
-
Die Bedingung gibt an, wann die Schleife neugestartet wird - und "win == 1 || v<=3" bedeutet: wenn eins von beiden erfüllt ist, d.h. nur wenn der User in weniger als drei Versuchen die Zahl errät, wird die Schleife abgebrochen.