sussel Geschrieben 26. Dezember 2007 Geschrieben 26. Dezember 2007 ich bin eine blutige anfängerin was programmieren angeht und über die ferien haben wir jetzt die aufgabe bekommen ein "spiel" zuprogrammieren Aufgabenstellung: Schreibe ein C++-Programm "Zahlenraten" mit folgenden Inhalt: Der Computer "denkt" sich eine Zahl aus (zwischen 1 und 999), die man erraten muss. Wie ein Computer sich eine Zahl erdenkt, könnt ihr bei "Zufallszahlengenerator" nachlesen. Der Dialog soll ungefähr so ablaufen: Man gibt eine Zahl ein und der Computer antwortet, ob seine Zahl grösser oder kleiner ist, als die des Benutzers. Dann kann der Benutzer erneut eine Zahl eingeben. Das Ganze geht so lange, bis der Benutzer die Zahl herausgefunden bzw. erraten hat oder er die erdachte Zahl nach 12 Versuchen nicht herausgefunden hat. An für sich funktioniert das alles super bei mir, aber ich hätte jetzt gerne dass man gefragt wird ob man nochmal spielen möchte...und das es dann praktisch von vorne anfängt nur will das nicht funktionieren, weil es irgendwie nich mehr in die while schleife reingeht. Das wär das, was ich bis jetzt habe...bedanke mich schon mal im vorraus für Hilfe. #include<conio> #include<math> #include<iostream> using namespace std; int main() { int zahl; int counter=1; int zufallszahl; int ug=1; int og=999; int x; cout << "..:Zahlenraten:.." <<endl; cout<<endl; cout<<"Spielanleitung: Der Computer legt eine Zahl zwischen 1 und 999 per Zufall fest. Sie haben 12 Versuche diese Zahl zu erraten! Der Computer wird ihnen sagen ob die von ihnen eingegebene Zahl, gr\x94\xe1\er oder kleiner als die Zufallszahl ist. Viel Spa\xe1!"<<endl; cout<<endl; do{ //Beginng Do-schleife randomize(); //Zufallszahl berechnen zufallszahl=(rand()%og)+ug; cout<<"Geben Sie bitte eine Zahl ein:"; while ((zahl!=zufallszahl)&&(counter<=12)){ //Beginn While cout<<endl; cout<<counter<<". Versuch:"; cout<<" "; cin>>zahl; //Zahleingabe if (zahl>zufallszahl){ cout<<"Zahl ist kleiner als "<<zahl<<endl; } if (zahl<zufallszahl){ cout<<"Zahl ist gr\x94\xe1\er als "<<zahl<<endl; } counter++; } //Ende while if (zahl==zufallszahl) { cout<<"Herzlichen Gl\x81\ckwunsch! Sie haben die Zahl nach dem "<<counter-1<<". Versuch erraten!"<<endl; } if ((zahl!=zufallszahl)&&(counter>12)){ cout<<endl; cout<<"Leider nicht geschafft!"<<endl; cout<<"Die richtige Zahl w\x84re: "<<zufallszahl<<" gewesen."<<endl; } cout<<endl; //Leere Zeile cout<<"Nochmal spielen?1/0"<<endl; cin>>x; }while(x==1); //Ende do getch(); return 0; }[/PHP] Zitieren
flashpixx Geschrieben 26. Dezember 2007 Geschrieben 26. Dezember 2007 Baue doch einfach um die While Schleife noch eine Schleife, die abbricht, wenn der Benutzer "nein" eingibt. Die Initialisierung machst du dann in der äußersten Schleife, damit hast Du bei jedem Versuch wieder die Startwerte. Die Deklaration machst Du besser außerhalb der Schleife HTH Phil Zitieren
singhX1991 Geschrieben 26. Dezember 2007 Geschrieben 26. Dezember 2007 Hallo , Versuch mal es mal ein marke zu setzen. Damit müsste es gehen!! #include<conio> #include<math> #include<iostream> using namespace std; int main() { int zahl; int counter=1; int zufallszahl; int ug=1; int og=999; int x; cout << "..:Zahlenraten:.." <<endl; cout<<endl; cout<<"Spielanleitung: Der Computer legt eine Zahl zwischen 1 und 999 per Zufall fest. Sie haben 12 Versuche diese Zahl zu erraten! Der Computer wird ihnen sagen ob die von ihnen eingegebene Zahl, gr\x94\xe1\er oder kleiner als die Zufallszahl ist. Viel Spa\xe1!"<<endl; cout<<endl; marke: // <-- Marke setzen!! do{ //Beginng Do-schleife randomize(); //Zufallszahl berechnen zufallszahl=(rand()%og)+ug; cout<<"Geben Sie bitte eine Zahl ein:"; while ((zahl!=zufallszahl)&&(counter<=12)){ //Beginn While cout<<endl; cout<<counter<<". Versuch:"; cout<<" "; cin>>zahl; //Zahleingabe if (zahl>zufallszahl){ cout<<"Zahl ist kleiner als "<<zahl<<endl; } if (zahl<zufallszahl){ cout<<"Zahl ist gr\x94\xe1\er als "<<zahl<<endl; } counter++; } //Ende while if (zahl==zufallszahl) { cout<<"Herzlichen Gl\x81\ckwunsch! Sie haben die Zahl nach dem "<<counter-1<<". Versuch erraten!"<<endl; } if ((zahl!=zufallszahl)&&(counter>12)){ cout<<endl; cout<<"Leider nicht geschafft!"<<endl; cout<<"Die richtige Zahl w\x84re: "<<zufallszahl<<" gewesen."<<endl; } cout<<endl; //Leere Zeile cout<<"Nochmal spielen?1/0"<<endl; cin>>x; if (x=="1") { goto marke; } if (x=="0") { system("close"); } return 0; Dann durch eine if Verzweigung das Problem lösen!! Mfg Singh Zitieren
Klotzkopp Geschrieben 26. Dezember 2007 Geschrieben 26. Dezember 2007 Versuch mal es mal ein marke zu setzen. Damit müsste es gehen!!Sicher, das geht, ist aber stilistisch äußerst fragwürdig. Es mag Fälle geben, in denen goto angebracht ist, weil es den Code vereinfacht, aber hier würde ich das auf keinen Fall machen. Es ist auch gar nicht notwendig. Hier ist schon eine funktionierende Schleife. Hier wurde nur vergessen, die Variable counter zurückzusetzen. Zitieren
sussel Geschrieben 26. Dezember 2007 Autor Geschrieben 26. Dezember 2007 erst mal vielen dank, für die schnelle hilfe. und noch ne doofe frage, wie setze ich den counter zurück? : / Zitieren
Guybrush Threepwood Geschrieben 26. Dezember 2007 Geschrieben 26. Dezember 2007 counter=1; [/PHP] indem du ihm einfach wieder den Startwert zuweist Zitieren
sussel Geschrieben 26. Dezember 2007 Autor Geschrieben 26. Dezember 2007 und wo muss ich den counter wieder auf 1 setzen in der schleife oder nach dem gefragt wurde ob man noch mal spielen will? Zitieren
Guybrush Threepwood Geschrieben 27. Dezember 2007 Geschrieben 27. Dezember 2007 na überleg doch mal selber wo das am Meisten Sinn machen würde und im Notfall probiers aus... Zitieren
setiII Geschrieben 27. Dezember 2007 Geschrieben 27. Dezember 2007 ...Es mag Fälle geben, in denen goto angebracht ist, weil es den Code vereinfacht... NEIN, es gibt absolut keinen Fall in dem sowas angebracht ist Zitieren
sussel Geschrieben 27. Dezember 2007 Autor Geschrieben 27. Dezember 2007 jetzt funktioniert alles wunderbar, counter auf 1 gesetzt und alles läuft perfekt : ) vielen dank für die schnelle und brauchbare hilfe!! Zitieren
carstenj Geschrieben 27. Dezember 2007 Geschrieben 27. Dezember 2007 Hi, NEIN, es gibt absolut keinen Fall in dem sowas angebracht ist dann zeig doch bitte mal alle Fälle. Zitieren
qat Geschrieben 28. Dezember 2007 Geschrieben 28. Dezember 2007 Also in einer kleinen Funktion mit vielen geschachtelten Schleifen kann ein goto error; ganz nützlich, und vor allem übersichtlicher als andere Vorgehensweisen sein. Zitieren
Kael_Uka Geschrieben 2. Januar 2008 Geschrieben 2. Januar 2008 Das Problem mit den Schleifen kann aber auch durch ein schönes break bzw. durch Exception-Handling gelöst werden. Zitieren
Klotzkopp Geschrieben 2. Januar 2008 Geschrieben 2. Januar 2008 Das Problem mit den Schleifen kann aber auch durch ein schönes break bzw. durch Exception-Handling gelöst werden. Ein break hilft nur bei einfachen Schleifen, nicht bei mehreren verschachtelten. Will man da aus einer der inneren Schleifen herausspringen, muss man etwas anderes benutzen, z.B. eine bool-Variable, die in jeder Schleifenbedingung zusätzlich geprüft wird. Man kann auch das gesamte Schleifenkonstrukt in eine eigene Funktion auslagern, und dann mit einer return-Anweisung vorzeitig rausspringen. Exceptions würde ich in so einem Fall auch nur mit Vorsicht einsetzen. Exceptions sagen für mich im Code etwas besonderes aus, nämlich dass eine Ausnahmesituation behandelt wird, etwas, das im normalen Programmablauf nicht vorhersehbar ist. Eine Exception für einen zwar vorzeitigen, aber dennoch erwarteten Abbruch zu verwenden, halte ich deshalb für fragwürdig. IMHO ist es nicht sinnvoll, irgendein Sprachmittel grundsätzlich abzulehnen. Wer goto ohne Kenntnis der Situation verteufelt, sollte IMHO auch gleich von break, continue und vorzeitigem return die Finger lassen, denn letztendlich ist das dasselbe: Ein unbedingter Sprung. Zitieren
blacks†one Geschrieben 4. Januar 2008 Geschrieben 4. Januar 2008 Also meiner Meinung nach ist goto wohl einer der besten Befehle die es gibt. Allerdings sollte man Ihn nur unter bestimmten Bedingungen benutzen. 1. Man kann shcon im voraus damit rechen dass man der Einzige bleibt, der den Quellcode versteht! 2. Man muss es ganz schön drauf ham um ein größeres Programm mit goto zu erstellen und um eventuelle Fehler dann noch beseitigen können. 3. Spätestens 1 Jahr später kann man sich ersteinem wieder 1 Monat lang in den Code einarbeiten, um ihn wieder einigermaßen zu verstehen. Dennoch, ich liebe goto;) Zitieren
TDM Geschrieben 7. Januar 2008 Geschrieben 7. Januar 2008 goto erinnert mich immer an meine ASM-Programme. Da wird auch im Code immer rumgesprungen. Zitieren
d.uNd.eE Geschrieben 11. Januar 2008 Geschrieben 11. Januar 2008 Ist nur meine Meinung, aber n goto sollte man NIE verwenden, wenn es auch irgendwie anders geht. Mit anders gehen meine ich "vernünftige" andere lösungen. Ich programmier jetzt doch ne gewisse zeit und hab NIE n goto benutzt (ausser in der kurzen Phase, wo ich ASM geschrieben hab ). Zumindest nicht im release, zu testen is das was anderes und meiner Meinung nach ne grossartige Sache, die man aber vor dem release dringend entfernen sollte. Zitieren
carstenj Geschrieben 15. Januar 2008 Geschrieben 15. Januar 2008 Hi, in der Kernelprogrammierung z.B. wird gerne goto benutzt: http://ezs.kr.hs-niederrhein.de/TreiberBuch/html/sec.technik.html Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.