Finde Fehler im C++0 Programm nicht
-
also, ich habe mich selbst an einem "Schere-Stein-Papier" spiel probiert, und bin auf einen Fehler gestoßen, welchen ich nun nach ca 2 Stunden selbst nicht lösen konnte, ich hoffe ihr könnt mir helfen.
Der Fehler ist, dass das Programm den 2. switch-Befehl einfach überspringt...#include <iostream> #include <cstdlib> using namespace std; short sa; //Spieler Auswahl short ca; //PC auswahl int main (void) { top: cout <<"Willkommen zu SgtAcestar's Schere-Stein-Papier-Spiel\n" <<"(Bitte wähle schreibe die Zahl deiner Auswahl und drücke Enter)\n" <<"\t1. Spiel starteb\n" <<"\t2. Tutorial\n" <<"\t3. Beenden\n" <<"\n\nSollte die das erste mal sein, dass du dieses Spiel spielst,\n" <<"so spiele bitte zuerst das Tutorial\n"; char auswahl1; cin >> auswahl1; switch( auswahl1 ) { case '1': cin.sync(); system ("CLS"); cout <<"Ok, das Spiel startet nun\n"; system ("PAUSE"); erneut: system ("CLS"); cout <<"Schere, Stein oder Papier?\n\n\n"; ca = (rand()%3)+1; char auswahl2; cin >> auswahl2; switch( auswahl2 ){ system ("CLS"); case 'stein': case 'Stein': sa == 1; case 'schere': case 'Schere': sa == 2; case 'papier': case 'Papier': sa == 3; if (sa == 1 && ca == 1) { cin.sync(); cout <<"\n\nStein vs. Stein !\n\n\tUnentschieden!\n\n\n" <<"\ta.Erneut spielen | \tb.Hauptmenue"; system ("PAUSE"); system("CLS"); goto top; } else if (sa == 1 && ca == 2) { cout <<"Stein vs. Schere !\n\n\tDu gewinnst!\n"; system ("PAUSE"); system("CLS"); goto top; } else if (sa == 1 && ca == 3) { cout <<"Stein vs. Papier !\n\n\tPC gewinnt!\n"; system ("PAUSE"); system("CLS"); goto top; } else if (sa == 2 && ca == 1) { cout <<"Schere vs. Stein !\n\n\tPC gewinnt!\n"; system ("PAUSE"); system("CLS"); goto top; } else if (sa == 2 && ca == 2) { cout <<"Schere vs. Schere !\n\n\tUnentschieden!\n"; system ("PAUSE"); system("CLS"); goto top; } else if (sa == 2 && ca == 3) { cout <<"Schere vs. Papier !\n\n\tDu gewinnst!\n"; system ("PAUSE"); system("CLS"); goto top; } else if (sa == 3 && ca == 1) { cout <<"Papier vs. Stein !\n\n\tDu gewinnst!\n"; system ("PAUSE"); system("CLS"); goto top; } else if (sa == 3 && ca == 2) { cout <<"Papier vs. Schere !\n\n\tPC gewinnt!\n"; system ("PAUSE"); system("CLS"); goto top; } else if (sa == 3 && ca == 3) { cout <<"Papier vs. Papier !\n\n\tUnentschieden!\n"; system ("PAUSE"); system("CLS"); goto top; } } case '2': system ("CLS"); cout <<"Willkommen in Tutorial\n" <<"Zum spielen des Spieles musst du nur\n" <<"deine Auswahl als Wort schreiben\n" <<"und dann mit 'ENTER' bestaetigen\n" <<"(gross und klein schreibung spielt keine Rolle)"; system("PAUSE"); system("CLS"); cin.sync(); goto top; case '3': return 0; } }
-
break
-
camper schrieb:
break
ich habe jetzt bei switch( auswahl2 ) break hinzugefügt, aber er überspringt die folgenden anweisungen immer noch...
-
Jeder case muss abgebrochen werden, um den Durchgang weiterer zu unterbinden.
In deinem ersten switch machst du das mit goto top, wie du es nun im 2ten geändert hast, hast du nicht gezeigt.Lerne noch etwas weiter bzw. lies genauer, damit hättest du dir eine Menge Zeit gespart.
-
Nur weil man std::cin und std::cout verwendet, ist das noch lange kein C++ Programm. Schon mal was von Schleifen gehört? Wenn ja, dann verwende sie auch und vergiss goto. Wenn nicht, fange noch mal von vorn an zu lernen. Tipps für gute Bücher findest du hier im Forum.
-
- char auswahl2 nimmt ein einzelnes Zeichen auf, keinen String
- 'Stein' ist kein String, sondern ein einzelnes Zeichen
- switch/case kann keine Strings auswerten
-
Hallo,
hab auch mal gehört diese "System()" Befehle/Funktionen was auch immer sollen nicht sonderlich guter Stil sein.
mfg
HarteWare
-
HarteWare schrieb:
hab auch mal gehört diese "System()" Befehle/Funktionen was auch immer sollen nicht sonderlich guter Stil sein.
Hast du richtig gehört. Meide system(), es ist lahm und macht eine Subshell auf. Außerdem ist es nicht plattformunabhängig.
-
Hier hab ich gerade noch etwas zu system gefunden: http://www.gidnetwork.com/b-61.html