1

C++ , Programm "neustarten"

Frage von ich99 ich99

Hey,

bin zurzeit dabei C++ zu lernen, heute hab ich mir zum üben ein Ratespiel gecodet . Das Spiel hat 4 Schwierigkeitsstufen und funktioniert soweit ganz gut. Jetzt such ich aber etwas um dem Spieler die möglichkeit zu geben ein neues Spiel zu starten, ohne jedes mal das programm neu zu öffnen.

cout << "Wollen Sie nochmal spielen? j fuer Ja oder n fuer Nein" << endl;
cin >> NeuesSpiel;
if (NeuesSpiel == 'j')
{
    goto Start;
}
else
{
    system("PAUSE");
}

allerdings wird das Programm jedes mal beendet auch wenn ich j eingeb. Habt ihr irgendwelche Tipps um das zu verwirklichen? PS: Ja ich weiß ... ich könnte das mit 1 für ja und 2 für nein oder so machen aber würd das gern mit Buchstaben hinbekommen :) das Laber für Start is gesetz.

Danke schon mal für dei hilfe MfG Ich

Fragen zu gleichen Themen finden

Antworten (3)

  • 0
    Antwort von CaroAs CaroAs

    Ich empfehle eine do-while-Schleife, damit man das Spiel mindestens einmal spielen muss, ansonsten macht das Starten des Programm keinen Sinn, also in etwa:

    char NeuesSpiel = 'j';
    
    do
    {
        //Spiele das Spiel
    
        cout << "Wollen Sie nochmal spielen? j fuer Ja oder n fuer Nein" << endl;
        cin >> NeuesSpiel;
    
    } while NeuesSpiel != 'n';
    

    Wenn Du allerdings sicherstellen willst, dass nur n für nein und j für ja eingegeben werden darf, musst Du die Eingabe solange z.B. in einer while-Schleife wiederholen bis j oder n eingegeben wurde.

    Kommentar von Kobold82 Kobold82Kobold82

    Ich mag do-while-schleifen nicht, die sind unübersichtlich, außerdem kann er ja gleich bei der Deklaration einen Wert festlegen bei dem die Schleife min. einmal durchlaufen wird. Man sollte Varialblen die abgefragt werden sowieso immer mit einem Wert vorbelgen, das vermeidet den ein oder anderen komischen Fehler.

    Kommentar von CaroAs CaroAsCaroAs

    Nun, es ist Geschmacksache, ob while oder do-while in einigen Fällen empfehlenswerte ist. Sicher kommt man ohne do-while genauso aus wie ohne while, wenn man es darauf anlegt und gar kein while mag. Und wie Du nachlesen kannst, habe ich tritzdem NeuesSpiel mit einer Initialisierung vorbelegt, damit kein undefinerter Zustand da ist, auch wenn er in diesem Fall korrekt wäre.

    Aber ich finde, dass man ruhig auch weniger verwendete Alternativen aufzeigen kann und letztendlich entscheidet der Fragesteller, wie er mit welcher Lösung weiterprogrammiert.

  • 0
    Antwort von Kobold82 Kobold82

    Wenn Du C++ lernen willst, dann mach es ohne goto, das wird geächtet.

    Mach halt einfach eine while(eingabe != 9) und 9 ist dann die exit, und unter den anderen werden dann mit switch(eingabe) kannst Du zum beispiel die restlichen Menüpunkte auswählen und dort Dein Spiel unterbringen usw.Ach so ich habs erst jetzt gelesen, dass Du es mit Buchstaben machen willst. Aber mach es auf keine Fall mit goto, das hat in C++ nichts verloren.

  • 0
    Antwort von D4rkScr43m D4rkScr43m

    Bitte! BITTE BITTE BITTE benutz keine Sprungmarken und kein Goto!!

    Das gehört sich einfach nicht! Es ist kein guter Stil und C++ bietet dir so viele Möglichkeiten um das auch nicht benutzen zu müssen.

    Mach lieber um dein Spiel an sich eine große Do-While-Schleife und als Bedingung nimmst du die in deinem if hier.

    Du musst allerdings NeuesSpiel vor der Schleife deklarieren.

    Kommentar von Kobold82 Kobold82Kobold82

    Eine Deklaration in einer Schleife macht nie Sinn.

    Kommentar von D4rkScr43m D4rkScr43mD4rkScr43m

    doch und zwar in einer for-each-Schleife,

    allein wenn man zwei for-Schleifen in einander schachtelt, macht das ganze Sinn!

Diese Frage

Verwandte Fragen

Noch nicht den richtigen Rat gefunden?

Einfach und schnell viele hilfreiche Ratschläge von Deutschlands aktivster Ratgeber-Community erhalten!

Einfach und schnell einen Tipp erstellen und Ihren guten Rat mit anderen teilen!

Einfach und schnell ein Video hochladen und anschaulichen Rat an alle geben!

Die unter gutefrage.net angebotenen Dienste und Ratgeber Inhalte werden nicht geprüft. Die Richtigkeit der Inhalte wird nicht gewährleistet. Rechtliche Hinweise finden Sie hier.