Dummyfrage zu IF



  • Hallo,

    irgendwie bin ich ganz daneben.

    Wenn ich folgenden Code habe:

    char zahl[3] = {'1', '2', '3'};
    
    for(int i=0; i<=2; i++)
    {
      if(zahl[i] == '1' || '2' || '4')
        cout << "OK ";
      else
      cout << "Falsch";
    }
    
    warum funktioniert das nicht? Wie macht man das mit dem ODER Vergleich richtig?
    


  • Du musst bei den mit || (logisches oder) jedesmal die GANZE BEDINGUNG angeben, also zum Beispiel:

    if((zahl[i] == '1') || (zahl[i] == '2') || (zahl[i] == '4'))
    {
         //Mach was
    }
    

    Felix :xmas2:



  • Hi,

    die inneren Klammern kannst du dir aber sparen. Die Vergleichsoperatoren haben einen höheren Rang als die logischen Operatoren.

    MfG Eisflamme



  • Ich kann (und will 😃 ) mir nicht merken, welche Operatoren Vorrang haben, deswegen setze ich immer Klammern so wie es sein muss, auch wenn sie obsolet (unnötig) sind.
    Langsamer wird der Code dadurch ja auch nicht 😉

    Felix :xmas1:



  • danke so klappts. und ne kürzere Schreibweise gibts das auch?



  • ja sicher:

    statt:

    char zahl[3]
    

    kannst du auch

    char z[3]
    

    schreiben...

    😃



  • lustig lustig tralalalalalalaaaa



  • MarciMarc schrieb:

    danke so klappts. und ne kürzere Schreibweise gibts das auch?

    klar,

    parse doch die Zahl (char) in ein int und teste dann (z < 3 && z > 0)



  • Gast221212 schrieb:

    MarciMarc schrieb:

    danke so klappts. und ne kürzere Schreibweise gibts das auch?

    klar,

    parse doch die Zahl (char) in ein int und teste dann (z < 3 && z > 0)

    Deine Überprüfung funktioniert nicht, da das Zeichen '0' nach int konvertiert == 48 ist.
    Die Überprüfung muss wenn dann so lauten:

    if(((int)z[i] - '0') >= 0 && ((int)z[i] - '0') <= 2) // Die Konvertierung nach int ist hier optional
             // Zahl liegt im Bereich zwischen 0 und 2
    

    Wobei das nur funktioniert, wenn die zu überprüfenden Zahlen in einem zusammenhängendem Bereich liegen. (Wie in deinem Beispiel)
    Wenn dagegen aber die Zahlen in "Nicht-zusammenhängenden" Bereichen ( z.B. 1, 2 und 4) überprüft werden sollen, kann nicht auf deine beschriebene Art zurückgegriffen werden. 😉 *kleinKarierterKorintenKack*

    //Edit: It´s just not my day 🙂

    Caipi



  • Phoemuex schrieb:

    Ich kann (und will 😃 ) mir nicht merken, welche Operatoren Vorrang haben

    Geht mir genauso. Obwohl, wollen würd ich schon. 😃
    Ich hab mir deshalb mal 'ne Tabelle mit allen Operatoren und ihrer Rangfolge ausdrucken lassen, ist echt hilfreich.

    Phoemuex schrieb:

    Langsamer wird der Code dadurch ja auch nicht 😉

    Richtig, aber meist lesbarer.


Anmelden zum Antworten