warum wird hier else ausgeführt?



  • #include <iostream>
    using namespace std;
    int main()
    {
    int a=5, b=3, c=2;
    if (a>b>c) 
    cout << "IN";
    else
    cout << "OUT";
    return 0;
    }
    


  • Zeile 6:

    if (a>b>c)
    

    Tut hier nicht was du willst.
    Zuerst wird a > b ausgewertet, das ergibt natürlich true .
    Und dann wird true > c ausgewertet. true wird zu int konvertiert (damit man einen Vergleich machen kann), also ergibt das ganze: (1 > 2) == false .

    Daher wird immer OUT geschrieben.
    Was du eigentlich willst, ist

    if (a > b && b > c) 
        cout << "IN";
    else
        cout << "OUT";
    


  • Der Ausdruck wird von links nach rechts ausgewertet:
    Also erst a > b
    das ergibt true (1)
    und dann true(1) > c
    und das ergibt false.
    Du willst wahrscheinlich

    if((a > b) && (b > c))
    ...



  • danke
    jetzt verstehe ich es



  • 🤡
    Ich muss noch den Standard zu der bool->int Konvertierung zitieren:

    N3337
    Für integrale Basisdatentypen, s. §4.7 / 4.
    Für Fließkommazahl-Typen, s. §4.9 / 2.
    In beiden lautet die Definition:

    If the source type is bool, the value false is converted to zero and
    the value true is converted to one.

    Sprich: true wird immer zu 1, false wird zu 0.


Anmelden zum Antworten