Wahr und falsch
Jeder Vergleich hat eine Antwort: ja oder nein. Solche Ja-Nein-Werte heißen Wahrheitswerte (englisch boolean values), nach dem Mathematiker George Boole. In C ist ihr Datentyp bool, und er hat nur zwei Werte: true und false. Um sie zu verwenden, schreibst du #include <stdbool.h> an den Anfang des Programms, so wie du #include <stdio.h> für printf schreibst:
#include <stdbool.h>
#include <stdio.h>
int main(void) {
int alter = 20;
bool ist_erwachsen = alter >= 18;
printf("Erwachsen: %d\n", ist_erwachsen);
if (ist_erwachsen) {
printf("Du darfst wählen\n");
}
return 0;
}Das gibt Folgendes aus:
Erwachsen: 1
Du darfst wählenLies die Zeile mit bool von rechts: Das Programm vergleicht zuerst alter >= 18, was wahr ist, und dann speichert = das Ergebnis in ist_erwachsen. Die Bedingung if (ist_erwachsen) bedeutet dasselbe wie if (ist_erwachsen == true). Sie ist nur kürzer, und deshalb schreiben Programmierer sie so. Namen von Wahrheitswert-Variablen beginnen meist mit ist_ oder hat_ (ist_erwachsen, hat_karte), damit sie sich wie eine Ja-Nein-Frage lesen.
Warum hat printf eine 1 ausgegeben? C hatte lange keinen bool, und darunter arbeitet es immer noch mit Zahlen: true ist 1 und false ist 0. Deshalb gibst du einen bool mit %d aus. Auch jeder Vergleich ergibt die Zahl 1 oder 0:
printf("%d\n", 5 > 3);
printf("%d\n", 2 > 3);Das gibt Folgendes aus:
1
0Und eine Bedingung in C ist einfach eine Zahl: 0 bedeutet falsch, und jede andere Zahl bedeutet wahr. Wenn du #include <stdbool.h> vergisst, kennt der Compiler das Wort bool nicht und meldet error: use of undeclared identifier 'bool'.
Eine Wahrheitswert-Variable ist zum Beispiel für gerade Zahlen praktisch. Eine Zahl ist gerade, wenn bei der Division durch zwei nichts übrig bleibt, das heißt, wenn der Rest zahl % 2 gleich 0 ist:
int zahl = 14;
bool ist_gerade = zahl % 2 == 0;
printf("Gerade: %d\n", ist_gerade);Das gibt Folgendes aus:
Gerade: 1Das Programm berechnet zuerst den Rest 14 % 2, der 0 ist, und vergleicht ihn erst dann mit null: % geht vor ==, so wie die Multiplikation vor der Addition. Bei einer ungeraden Zahl, sagen wir 7, ist der Rest 1 und ist_gerade ist falsch. Wenn du hier aus Versehen ein einzelnes Gleichheitszeichen schreiben würdest, zahl % 2 = 0, würde der Compiler error: expression is not assignable melden, denn in das Ergebnis einer Rechnung kannst du nichts speichern.
So schreibst du es:
Anweisungen
- 1
Füge am Anfang des Programms
#include <stdbool.h>hinzu. Lege dann unter demprintfeinebool-Variableist_geradean, die das Ergebnis des Vergleichszahl % 2 == 0enthält, und gib sie aus:printf("Gerade: %d\n", ist_gerade);. Die Zahl 7 ist nicht gerade, also gibt das ProgrammGerade: 0aus. - 2
Schreibe unter diese Zeile eine
if-Anweisung mit der Bedingungist_gerade, dieDie Zahl ist geradeausgibt, und gib ihr einenelse-Zweig, derDie Zahl ist ungeradeausgibt. Das Programm gibt Folgendes aus:Zahl: 7 Gerade: 0 Die Zahl ist ungerade