Blöcke und Einrückung
Ein Block kann so viele Anweisungen enthalten, wie du brauchst. Alles zwischen { und } gehört zum Block, und wenn die Bedingung wahr ist, wird alles davon ausgeführt, eine Anweisung nach der anderen:
int temperatur = 32;
if (temperatur > 30) {
printf("Es ist sehr heiß\n");
printf("Trink viel Wasser\n");
}
printf("Schönen Tag noch\n");Das gibt Folgendes aus:
Es ist sehr heiß
Trink viel Wasser
Schönen Tag nochDer Block endet mit der schließenden geschweiften Klammer }. Die Zeile, die Schönen Tag noch ausgibt, steht danach, gehört nicht zum Block und wird deshalb immer ausgeführt, ob die Bedingung wahr ist oder nicht.
Die Zeilen des Blocks sind eingerückt: Sie beginnen mit 4 Leerzeichen. Dem Compiler ist die Einrückung egal. Nur die geschweiften Klammern entscheiden, was zum Block gehört, und das Programm würde auch ganz ohne Einrückung funktionieren. Die Einrückung ist für Menschen: Sie zeigt auf einen Blick, welche Zeilen zum Block gehören, und deshalb verwenden Programmierer sie immer. Du musst keine Leerzeichen zählen. Wenn du nach einem { die Eingabetaste drückst, rückt der Editor die nächste Zeile für dich ein, und auch die Tab-Taste fügt 4 Leerzeichen ein.
Weil die Klammern entscheiden, was im Block steht, und nicht die Einrückung, kann dich die Einrückung sogar in die Irre führen:
int temperatur = 20;
if (temperatur > 30) {
printf("Es ist sehr heiß\n");
}
printf("Trink viel Wasser\n");Das gibt Folgendes aus:
Trink viel WasserDie letzte Codezeile ist eingerückt, steht aber nach der }, gehört also nicht zum Block und wird auch bei 20 Grad ausgeführt.
Dasselbe passiert, wenn du die geschweiften Klammern weglässt. C erlaubt das, aber dann gehört nur die einzelne Anweisung direkt nach der Bedingung zum if:
int temperatur = 20;
if (temperatur > 30)
printf("Es ist sehr heiß\n");
printf("Trink viel Wasser\n");Das gibt Folgendes aus:
Trink viel WasserDas zweite printf gehört nicht zur Bedingung, egal wie es eingerückt ist. Solcher Code fängt meist richtig an, mit einer einzelnen Anweisung und ohne Klammern, und geht später schief, wenn jemand eine zweite Zeile zum Block hinzufügt und die Klammern vergisst. Deshalb schreibt dieser Kurs die geschweiften Klammern immer, auch um eine einzelne Anweisung.
Wenn du die schließende Klammer } vergisst, meldet der Compiler error: expected '}' in der letzten Zeile des Programms, denn erst dort merkt er, dass eine Klammer fehlt. Such sie aber weiter oben: nach der letzten Zeile des Blocks, den du nicht geschlossen hast. Die Notiz unter dem Fehler, to match this '{', zeigt möglicherweise auf das { nach int main(void): Der Compiler ordnet die Klammern der Reihe nach zu, also hat das }, das für main gedacht war, stattdessen deinen Block geschlossen.
So schreibst du es:
Anweisungen
- 1
Das Programm fordert dich auf, das Ladegerät anzuschließen, obwohl der Akku zu 80 % voll ist. Die Zeile, die
Schließe das Ladegerät anausgibt, ist eingerückt, steht aber nach der}. Verschiebe die}unter sie, damit die Zeile zum Block derif-Anweisung gehört. Dann gibt das Programm nurAkku: 80%aus. - 2
Ändere
akkuin15und führe das Programm aus. Jetzt ist die Bedingung wahr, und das Programm gibt alle drei Zeilen aus:Akku schwach Schließe das Ladegerät an Akku: 15%