Frage zur While Schleife



  • Hi leute,

    ich habe ein Problem? Ich kann den Fehler nicht erkennen.

    int found =0; 
    
        int Array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8 ,9};
        int a = 3; 
    
        while ((found != 1) || (fel != ( LAST_ELEMENT) || (INVALID)) || (i<10))
        {
            if ( Array[i] == a)
            {
                found =1;
                fel = NO_ERROR; 
    
            }
             i++; 
        }
    

    Die Schleife bricht nicht ab, wenn

    found == 1
    

    ist;
    Das ist nur ein Beispiel, der Sinn soll keine Rolle spielen 🙂

    Im Voraus Vielen Dank

    Lena



  • fanbjs schrieb:

    Die Schleife bricht nicht ab, wenn

    found == 1
    

    ist;

    Muss sie ja auch nicht. Du hast ja || geschrieben. Damit läuft die Schleife, solange mindestens einer der Ausdrücke wahr ist. Somit ist wohl der andere Ausdruck wahr.

    Das hier:

    (fel != ( LAST_ELEMENT) || (INVALID))
    

    musst du übrigens "aussschreiben". So macht das nicht das, was du erwartest.



  • Erstens: Die Oder-Bedingung wird erst erfüllt, wenn beide Teile zutreffen - du benötigst vermutlich ein UND (&&) stattdessen.

    Zweitens: Das (fel != ( LAST_ELEMENT) || (INVALID)) ist Unsinn - du kannst einen Wert auf diese Weise nicht mit zwei möglichen Zahlen vergleichen (LAST_ELEMENT||INVALID wird zuerst berechnet und fel mit dieser Verknüpfung - vermutlich konstant 1 - verglichen). Du benötigst hier zwei Vergleiche fel!=LAST_ELEMENT && fel!=INVALID


Log in to reply