Frage zur while Schleife



  • Hallo,

    ich habe eine kurze Frage zur while Schleife. Ist es nicht möglich sowas zu schreiben:

    char Frage = 'J';
    
      while(Frage != 'J' || Frage != 'j')
       {
          // Eine Zahl eingeben, und fragen ob die Zahl richtig eingegeben wurde
          cin >> Frage;
       }
    

    Bei der eingabe von "Frage" kann ich eingeben was ich will, die Schleife wird nie abgebrochen.
    Wenn ich es aber so versuche:

    char Frage = 'N';
    
      while(Frage == 'N' || Frage == 'n')
       {
          // Eine Zahl eingeben, und fragen ob die Zahl richtig eingegeben wurde
          cin >> Frage;
       }
    

    oder so

    char Frage = 'J';
    
      while(Frage != 'J')
       {
          // Eine Zahl eingeben, und fragen ob die Zahl richtig eingegeben wurde
          cin >> Frage;
       }
    

    klappt es. Kann mir jemand sagen warum das so ist?



  • Unbekannt schrieb:

    while(Frage != 'J' || Frage != 'j')
    

    Einer der beiden Teile der Bedingung ist auf jeden Fall wahr, egal welchen Wert "Frage" hat - und damit ist die Gesamtbedingung (oder)konstant true. Du solltest lieber den operator %% (und) verwenden.



  • Wenn jemand 'N' eingibt sollte die Schleife abbrechen; richtig?
    Wenn 'J' eingeben wird ist zwar die erste Bedingung der Oder-Bedingung erfüllt aber nicht die zweite. Du müsstest 'Jj' gleichzeitig eingeben können.
    Du solltest schreiben

    while(Frage != 'J' && Frage != 'j')
       {
          // Eine Zahl eingeben, und fragen ob die Zahl richtig eingegeben wurde
          cin >> Frage;
       }
    


  • Ich sehe, während ich meine Antwort formulierte (ich bin schon alt und nicht mehr der schnellste) hat CStoll die Antwort geliefert. 😉



  • RR schrieb:

    Wenn jemand 'N' eingibt sollte die Schleife abbrechen; richtig?

    Nein, in der Schleife wird eine Zahl eingegeben und danach wird die eingegebene Zahl nochmal angezeigt und gefragt ob sie richtig eingegeben wurde. Wenn J oder j gedrückt wird, soll die Schleife beendet werden, wird N, n oder irgendwas anderes eingegeben soll man die Zahl nochmal eingeben können. Aber wie gesagt wenn ich es so schreibe

    while(Frage != 'J' || Frage != 'j')
        {
            ......
        }
    

    wird die Schleife wiederholt egal ob ich n, N, J, j oder sonstwas eingebe.



  • Bei 'J' ist zwar die erste Bedingung der Oder-Bedingung erfüllt, aber nicht die zweite 'j'. Die Bedingung ist immer false, solange nicht 'Jj' gleichzeitig eingeben werden könnte. Das Problem ist 'J' != 'j'.



  • Vielen dank für die Antworten, das hat mir sehr geholfen.


Anmelden zum Antworten