Endlos schleife + Fehler



  • Hallo, PS: Ihr werdet mich hier ooooffft posten sehen 😃
    Nun zu mein Problem
    Ich frage hier als erster nach den Namen ..
    das geht dasnn irgendwie so :

    if (auswahl==1){
                   cout << "Willkommen zum Quiz" << endl;
                   getchar();
                   cout << "Bitte geben Sie Ihren Namen ein , mit dem Sie in der Rankliste erscheinen wollen" << endl;
                   cin >> namen;
                   cout << "Ihr Namen soll also " << namen << " sein?" << endl;
                   cin >> namensbestatigung;
                   if (namensbestatigung=="Nein" && "N" && "nein" && "n")
                                  cout << "Bitte geben Sie Ihren Namen ein , mit dem Sie in der Rankliste erscheinen wollen" << endl;
                    cin << namen2;
                    cout << "Ihr Namen soll also " << namen2 << " sein?" << endl;
                   if (namensbestatigung=="Ja" && "J" && "Jo" && "ja" && "j"){
                   cout << "Okay wir starten das Quiz" << endl;
                   }
             }
    

    ABER , er zeigt mit dann Namen an .. und ja er kickt mich sofort aus dem Programm ...
    WAS Mir ja viiiiiel lieber wäre... 🤡
    Wenn es so ne art "endlosschleife" wäre das heißt..der kann so oft wie er will nein eingeben .. es springt immer wieder zu dem script zurück..
    Ich hoffe ihr meint was ich meine ....



  • was hälst du von einer "do while" Schleife.

    Bsp.:
    #include <stdio.h>
    #include <iostream.h>

    void main()
    {
    int zahl = 99;

    do
    {
    cout << "Gib eine Zahl ein";
    cout << "99 um Programm zu beenden. \n"; // \n für zeilenumbruch
    cin >> zahl;

    cout << "Die eingelesene Zahl war: " << zahl <<endl<<endl;
    }

    while (zahl != 99);

    }



  • Mach es einfach mit einer while Schleife.

    if (auswahl==1){
                   cout << "Willkommen zum Quiz" << endl;
                   getchar();
    		while(true){
                   		 cout << "Bitte geben Sie Ihren Namen ein , mit dem Sie in der Rankliste erscheinen wollen" << endl;
                  		 cin >> namen;
                  		 cout << "Ihr Namen soll also " << namen << " sein?" << endl;
                  		 cin >> namensbestatigung;
                   		 if (namensbestatigung=="Ja" && "J" && "Jo" && "ja" && "j"){
                  		 cout << "Okay wir starten das Quiz" << endl;
    	      		 break;
    			}
                   }
    
             }
    

    While ist eine Schleife und wird mit break unterbrochen. Also wenn er halt Ja, Jo usw. eingibt.
    Natürlich kannst du auch anstatt true ein wert eingeben und prüfen. Allerdings wird ich das so machen.



  • if (namensbestatigung=="Ja" && "J" && "Jo" && "ja" && "j")
    

    Die Bedingung kommt mir ein wenig suspekt vor 😃



  • BlaBlubb schrieb:

    if (namensbestatigung=="Ja" && "J" && "Jo" && "ja" && "j")
    

    Die Bedingung kommt mir ein wenig suspekt vor 😃

    Hups... das ist mir auch erst je tzt aufgefallen ..^^ rofl
    Mhmm dien theorie hat nur einen fehler...
    Nämlich wenn der "Nein" oder so eingibt, dann ist NICHTS ^^
    Nur ne bestätigung macht nur sinn wenn der user wählen kann zwischen JA und nein ?! Oderr nicht ?

    Stefan311 schrieb:

    Mach es einfach mit einer while Schleife.

    if (auswahl==1){
                   cout << "Willkommen zum Quiz" << endl;
                   getchar();
    		while(true){
                   		 cout << "Bitte geben Sie Ihren Namen ein , mit dem Sie in der Rankliste erscheinen wollen" << endl;
                  		 cin >> namen;
                  		 cout << "Ihr Namen soll also " << namen << " sein?" << endl;
                  		 cin >> namensbestatigung;
                   		 if (namensbestatigung=="Ja" && "J" && "Jo" && "ja" && "j"){
                  		 cout << "Okay wir starten das Quiz" << endl;
    	      		 break;
    			}
                   }
                   
             }
    

    While ist eine Schleife und wird mit break unterbrochen. Also wenn er halt Ja, Jo usw. eingibt.
    Natürlich kannst du auch anstatt true ein wert eingeben und prüfen. Allerdings wird ich das so machen.



  • Doch, er springt dann wieder an den Anfang der Schleife und fragt nochmal nach dem Namen. Solange bis der Benutzer bei der Bestätigungsfrage Ja, Jo, ja, j oder J eingibt. (es ist also egal ob er "nein" "..." "HALTS MAUL" oder was auch immer eingibt.)



  • Nur, dass die Abfrage etwas anders lauten müsste
    statt

    if (namensbestatigung=="Ja" && "J" && "Jo" && "ja" && "j")
    

    dann besser

    if (namensbestatigung=="Ja" || namensbestatigung=="J" || namensbestatigung=="Jo" || namensbestatigung=="ja" || namensbestatigung=="j")
    


  • oh, so nebenbei jetzt, aus Interesse:

    gibt es irgendeinen Trick mit dem man sowas wie name=="j"¦¦"ja"¦¦"JA" umsetzen könnte?

    Hmm, wo ich grad drüber nachdenke... so?

    template <class T>
    bool myEqOr(const T& var;T* begin;T* end){
        for(;begin!=end;++begin)
            if(var==*begin) return true;
        return false;
    }
    
    //wo benötigt
    string antwort="jo";
    string korrekt[5]={"ja","jo","jupp","sicher","j"};
    if(myEqOr(antwort,korrekt,korrekt+5))
    //...
    

    So in der Art? (Bitte mal die Pointer korrigieren, wie funktionniert das bei den STL Algos die einen iterator (oder eben einen Array Pointer) erwarten? Gleich so nebenbei, hehe. Ich merke grad, dass ich mich mal wieder mit arrays beschäftigen muss... vector macht das Leben viel zu leicht)
    Ob das jetzt viel spart ist ne andere Sache...



  • Viel einfacher 😉

    string korrekt[5]={"ja","jo","jupp","sicher","j"};
    string antwort="jo";
    
    if (find(korrekt, korrekt+5, antwort) != korrekt+5) {
    }
    

    Oder noch gewrapped (für Arrays, echte Arrays und nichts anderes als Arrays):

    template<typename Type, size_t N>
    bool contains(Type const (&ary)[N], Type const& what) {
        return find(ary, ary + N, what) != ary + N;
    }
    
    string korrekt[5]={"ja","jo","jupp","sicher","j"};
    string antwort="jo";
    
    if (contains(korrekt, antwort)) {
    }
    


  • *patsch* Wo war der Wald, ich seh nur Bäume....

    Vielen Dank.


Anmelden zum Antworten