Spiel "Zahlen raten" - finde kleinen Fehler nicht
-
Habe ein Spiel geschrieben, bei dem man eine Zahl zwischen 1 und 15 erraten muß.
Die Funktion Random habe ich nun erstmal weggelassen, die gesuchte Zahl ist erstmal immer = 13.
Man hat 3 Versuche.
Wenn der dritte Versuch um ist, erhalte ich immer folgende Ausgabe:
http://jippel.lima-city.de/cplus.jpg
Warum erscheint die Ausgabe 3mal ?
Ist bestimmt ganz trivial, aber ich hab wohl schon "Betriebsblindheit"
#include <iostream> using namespace std; void pruef(int gesuchteZahl); int versuch = 0; void pruef(int gesuchteZahl) { int probier = 0; cout << "Das ist Versuch Nummer: " << versuch+1 << "\n"; cin >> probier; if(probier == gesuchteZahl && versuch <= 2) { cout << "Glueckwunsch, gewonnen !\n"; } if(probier > gesuchteZahl && versuch <= 2) { cout << "Zahl zu hoch ! \n"; versuch++; if(versuch <= 2) { pruef(gesuchteZahl); } } if(probier < gesuchteZahl && versuch <= 2) { cout << "Zahl zu klein ! \n"; versuch++; if(versuch <= 2) { pruef(gesuchteZahl); } } if(versuch > 2 && probier != gesuchteZahl) { cout << " Leider verloren ! Die Zahl war: " << gesuchteZahl << " Versuch = " << versuch << "\n"; } } void main() { int zufall = 13; char nochmal; do { cout << " Sie muessen ein Zahl zwischen 1 und 15 erraten ! \n"; pruef(zufall); cout << " Nochmal - j oder n \n"; cin >> nochmal; versuch = 0; } while(nochmal != 'n'); }
-
Du rufst die Funktion rekursiv auf, um einen weiteren Versuch zu starten - und beim Rücklauf landest du auf jeder Ebene bei der Abfrage "if(versuch>2 && probier!=gesuchteZahl)...". An der Stelle würde wohle eine Schleife mehr Sinn machen als dein rekursiver Ansatz.
PS: Globale Variablen sind böse
-
sorry lag falsche
-
So in etwa:
#include <iostream> using namespace std; bool pruef(int gesuchteZahl); int versuch = 0; bool pruef(int gesuchteZahl) { int probier = 0; cout << "Das ist Versuch Nummer: " << versuch+1 << "\n"; cin >> probier; if(probier == gesuchteZahl && versuch <= 2) { cout << "Glueckwunsch, gewonnen !\n"; } else if(probier > gesuchteZahl && versuch <= 2) { cout << "Zahl zu hoch ! \n"; versuch++; return false; } else if(probier < gesuchteZahl && versuch <= 2) { cout << "Zahl zu klein ! \n"; versuch++; return false; } else if(versuch > 2 && probier != gesuchteZahl) { cout << " Leider verloren ! Die Zahl war: " << gesuchteZahl << " Versuch = " << versuch << "\n"; } } int main() { int zufall = 13; char nochmal; do { cout << " Sie muessen ein Zahl zwischen 1 und 15 erraten ! \n"; while(versuch < 3) pruef(zufall); cout << " Nochmal - j oder n \n"; cin >> nochmal; versuch = 0; } while(nochmal != 'n'); }
nicht getestet
-
Nein, die Schleife sollte eher IN der Funktion sein und nicht außen herum:
bool pruef(int ziel) { int probier; for(int versuch=0;versuch<3;++versuch)//beachte: 'versuch' ist nun eine lokale Variable der Funktion { cin>>probier; if(probier<ziel) cout<<"zu klein\n"; else if(probier>ziel) cout<<"zu groß\n"; else { cout<<"gewonnen\n"; return true; } } cout<<"verloren\n"; return false; }