Logische Operatoren: nicht
Der dritte logische Operator, ! (ein Ausrufezeichen), heißt Negation. Er verwandelt einen Wahrheitswert in sein Gegenteil: !true ist false und !false ist true. Lies ihn als „nicht“:
bool es_regnet = false;
if (!es_regnet) {
printf("Ich brauche keinen Regenschirm\n");
}Das gibt Folgendes aus:
Ich brauche keinen Regenschirmes_regnet ist false, also ist !es_regnet gleich true, und der Block wird ausgeführt. Lies die Bedingung als „wenn es nicht regnet“. Du könntest auch es_regnet == false schreiben. Es bedeutet dasselbe, aber ! ist kürzer.
Die Negation ist bei Wahrheitswert-Variablen und beim Kombinieren von Bedingungen am nützlichsten. „Der Laden ist geöffnet und es ist kein Feiertag“ ist ist_geoeffnet && !ist_feiertag. Bei Vergleichen brauchst du sie meist nicht: Statt „alter ist nicht mindestens 18“ schreibst du einfach den umgekehrten Vergleich, alter < 18.
! gilt nur für das, was direkt danach kommt. Um einen ganzen Vergleich oder eine verbundene Bedingung zu negieren, setze sie in Klammern: !(punkte >= 50) oder !(hat_fuehrerschein && hat_auto). Ohne die Klammern bekommst du etwas anderes:
int punkte = 30;
if (!punkte >= 50) {
printf("Durchgefallen\n");
}Der Compiler meldet:
error: logical not is only applied to the left hand side of this comparison [-Werror,-Wlogical-not-parentheses]In !punkte >= 50 gilt das ! nur für punkte. !punkte ist falsch, also 0, weil 30 nicht 0 ist, und 0 >= 50 ist falsch, das Programm würde also nie Durchgefallen ausgeben. Viele Compiler lassen das nur mit einer Warnung durch; hier ist es ein Fehler. Richtig ist !(punkte >= 50) oder noch einfacher punkte < 50.
So schreibst du es:
Anweisungen
- 1
Schreibe anstelle des Kommentars eine
if-Anweisung, dieIch gehe nach draußenausgibt, wenn das Internet nicht funktioniert. Verwende!. - 2
Nach draußen zu gehen lohnt sich nur, wenn es nicht regnet. Erweitere die Bedingung mit
&&so, dass sie nur wahr ist, wenn das Internet nicht funktioniert und es gleichzeitig nicht regnet (!es_regnet). Füge dann einenelse-Zweig hinzu, derIch lese ein Buchausgibt.