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:- 0 <= Uhrzeit ----> Je nach Eingabe true oder false, also entweder 1 oder 0.
- 1 oder 0 <= 5 ----> Ist immer true logischerweise.
- Uhrzeit == 23 ----> Je nach Eingabe true oder false.
- 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.
-
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.