Frage zu do - while Loop



  • Hallo Zusammen

    bin ganz neu hier und habe erst vor ein paar Tagen mich mit C++ beschäftigt und "gelernt"...
    Um ein bisschen rein zu kommen habe ich ein Quiz erstellt, das ganze funktioniert auch soweit ! nur ein kleines Problem habe ich....

    Ich habe 3 Fragen erstellt, sollte man die falsche Antwort geben, kann man durch 'y' nochmal versuchen, allerdings die selbe Frage, wie kann ich den do-while Loop einstellen, das man wieder ganz von vorne anfängt? - bei Frage 1 ?

    Freu mich auf eure Vorschläge bzw. auf allg. Verbesserungen am Code, da ich glaube noch recht umständlich geschrieben habe als blutfrischer Anfänger 🙂

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main ()
    {
        string por ("lissabon"), spa ("madrid"), fra ("paris");
        string por1, spa1, fra1;
        char neu = 'y';
    
        do
        {
             cout << "Wie heisst die Hauptstadt von Portugal ? \n" << endl;
             cin >> por1;
    
             if (por == por1)
             {
             cout << "BRAVO !" << endl;
             getchar();
    
       do
       {
             cout << "Wie heisst die Hauptstadt von Spanien ? \n" << endl;
             cin >> spa1;
    
             if (spa == spa1)
             {
                     cout << "BRAVO !" << endl;
                     getchar();
    
    do
    {
                     cout << "Wie heisst die Hauptstadt von Frankreich ? \n" << endl;
                     cin >> fra1;
    
                     if (fra == fra1)
                     {
                             cout << "BRAVO !" << endl;
                             getchar();
    
                             }
                     else
                     cout << "Das war leider falsch! Moechten Sie neu starten (y/n) ? \n)" << endl;
                     cin >> neu; 
                     }
                     while (neu !='n');
             }        
             else
             cout << "Das war leider falsch! Moechten Sie neu starten (y/n) ? \n)" << endl;
             cin >> neu;      
             } 
              while (neu !='n');
    
             }
    
             else
             cout << "Das war leider falsch! Moechten Sie neu starten (y/n) ? \n)" << endl;
             cin >> neu;      
    
                 }
    
       while (neu !='n');
    
        }
    


  • Willkommen im Forum!
    Ich verstehe nicht ganz: soll er nur die falsch beantwortete Frage wiederholen oder den ganzen Quiz erneut starten?



  • stand jetzt, wiederholt er die falsch beantwortete Frage...

    Ich möchte allerdigns das er wieder bei Frage 1 anfängt 😃
    habe auch schon bissle im netz gesucht aber leider nichts gefunden was passen könnte



  • Pseudocode als Ansatz:

    while(true)
    {
        frage1 stellen
        Ergebnis ausgeben (richtig/falsch)
        cin.ignore(cin.rdbuf()->in_avail()); //leere alle Zeichen im Puffer
        if (getchar() == 'y')
            continue;
    
        frage2 stellen
        Ergebnis ausgeben
        cin.ignore(cin.rdbuf()->in_avail());
        if (getchar() == 'y')
            continue;
    
        ...
    
        letzte_frage_stellen()
        if (eingabe == richtigeAntwort)
        {
            cout << "Sie haben gewonnen!\n";
            break;
        }
    }
    

    Der Vorschlag ist aber auf dein Konzept zugeschnitten und müsste komplett umgebaut werden, wenn die Fragen z.B. in einer Schleife und nicht jede einzeln gestellt werden.

    Edit: ein paar Tipps meinerseits:
    - using namespace std; nicht global deklarieren
    - zum Speichern der Eingabe kannst du auch dieselbe Variable verwenden (wird jedes Mal überschrieben)


Anmelden zum Antworten