Hilfe zu if else



  • cout << "Bitte geben Sie die Stunde der aktuellen Uhrzeit ein: ? ";
    cin >> uhrzeit;
    
    if (0 <= uhrzeit <= 5 || uhrzeit == 23)
    {
    	cout << "Gute Nacht." << endl;
    }
    else if (6 <= uhrzeit <= 10)
    {
    	cout << "Guten Morgen." << endl;
    }
    else if (11 <= uhrzeit <= 13)
    {
    	cout << "Mahlzeit." << endl;
    }
    else if (14 <= uhrzeit <= 17)
    {
    	cout << "Guten Tag." << endl;
    }
    else if (18 <= uhrzeit <= 22)
    {
    	cout << "Guten Abend:" << endl;
    }
    else
    {
    	cout << "Keine erlaubte Stundeneingabe." << endl;
    }
    
    system("pause");
    return 0;
    

    }

    warum gibt die ausgabe bei mir jedes mal "Gute Nacht" aus?



  • @Lilly weil 0 <= uhrzeit für jede positive Uhrzeit wahr ist, also 1.
    für negative werte ist es unwahr, also 0.

    Beide Werte sind also immer kleiner als 5. Damit ist der linke Ausdruck vom || immer wahr und somit auch der gesamte Ausdruck.

    Wo hast du diesen falschen (a <= b <= c) Ausdruck gesehen?



  • https://en.cppreference.com/w/cpp/language/operator_precedence
    Wie du dort siehst, hat der || Operator eine niedriger Priorität als der <= Operator. Damit bindet der <= Operator die Operanden an sich. Jetzt stehen sich aber sozusage <= gegenüber und jetzt muss die Assoziativität aushelfen. In dem Fall ist die Assoziativität von "Links nach Rechts". Also:

    1. 0 <= Uhrzeit ----> Je nach Eingabe true oder false, also entweder 1 oder 0.
    2. 1 oder 0 <= 5 ----> Ist immer true logischerweise.
    3. Uhrzeit == 23 ----> Je nach Eingabe true oder false.
    4. immer true || egal was auf der Seite steht ----> true ----> Damit ist die if-Bedingung immer true.


  • @Lilly sagte in Hilfe zu if else:

    6 <= uhrzeit <= 10

    Einfach raten wie man in C++ etwas wohl schreibt und davon ausgehen dass es stimmt funktioniert bei Anfängern sehr selten. Googel nach Beispielen. Oder wenn du jmd. zur Hand hast: frag. Wobei hier im Forum fragen bei so grundlegenden Grundlagen eher nicht passend ist.



  • @out 3. wird Aufgrund der Kurzschlussregel garnicht mehr ausgewertet, da das Ergebnis schon feststeht.



  • @Lilly

    Du solltest auch uhrzeit initialisieren.
    Schau dir nochmal die Logik hinter den Operatoren || und && an.
    Man kann auch für || 'or' schreiben und für && 'and'. Vllt macht es das ja leichter.

    #include <iostream>
    using namespace std;
    
    
    int main() {
    
      int uhrzeit;
    
      cout << "Bitte geben Sie die Stunde der aktuellen Uhrzeit ein: ? ";
      cin >> uhrzeit;
    
    if (uhrzeit >= 0 && uhrzeit <= 5)
            {
              cout << "Gute Nacht." << endl;
            }
    else if (uhrzeit >= 6 && uhrzeit <= 10)
            {
              cout << "Guten Morgen." << endl;
            }
    else if (uhrzeit >= 11 && uhrzeit <= 13)
            {
              cout << "Mahlzeit." << endl;
            }
    else if (uhrzeit >= 14 && uhrzeit <= 17)
            {
              cout << "Guten Tag." << endl;
            }
    else if (uhrzeit >= 18 && uhrzeit <= 23)
            {
              cout << "Guten Abend:" << endl;
            }
    else
            {
    cout << "Keine erlaubte Stundeneingabe." << endl;
            }
    
    
    
        return 0;
    }
    
    


  • @Lou-Cyphr3 sagte in Hilfe zu if else:

    Alle Vergleiche braucht man auch nicht.

    #include <iostream>
    using namespace std;
    
    int main() {
    
      int uhrzeit;
    
      cout << "Bitte geben Sie die Stunde der aktuellen Uhrzeit ein: ? ";
      cin >> uhrzeit;
    
    if (uhrzeit < 0 || uhrzeit >= 24) // geandert, Danke wob
            {
              cout << "Willkommen in der Zwischenzeit" << endl;
            }
    else if {uhrzeit <= 5 || uhrzeit >= 23)
            {
              cout << "Gute Nacht." << endl;
            }
    else if (uhrzeit <= 10)
            {
              cout << "Guten Morgen." << endl;
            }
    else if (uhrzeit >= 11 && uhrzeit <= 13)
            {
              cout << "Mahlzeit." << endl;
            }
    else if (uhrzeit <= 17)
            {
              cout << "Guten Tag." << endl;
            }
    else if uhrzeit <= 22)
            {
              cout << "Guten Abend:" << endl;
            }
    else
            {
    cout << "Keine erlaubte Stundeneingabe." << endl;
            }
    
        return 0;
    }
    


  • @DirkB sagte in Hilfe zu if else:

    if (uhrzeit < 0 && uhrzeit >= 24)

    Zahlen, die gleichzeitig negativ und größergleich 24 sind, kommen selten vor 🙂
    Und warum ist 23 Uhr "Keine erlaubte Stundeneingabe."?

    Aber ansonten ist das natürlich schon eine Vereinfachung. Wenn jetzt @Lou-Cyphr3 noch die Einrückung der ifs verbessern könnte...



  • @wob sagte in Hilfe zu if else:

    Zahlen, die gleichzeitig negativ und größergleich 24 sind, kommen selten vor

    Danke, korrigiert.

    Und warum ist 23 Uhr "Keine erlaubte Stundeneingabe."?

    Die wird beim "Gute Nacht" abgefangen.



  • Zahlen, die gleichzeitig negativ und größergleich 24 sind, kommen selten vor

    Man hätte auch sofort einen unsigned Datentypen nehmen können.