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) {
std::cout << "Es ist sehr heiß" << std::endl;
std::cout << "Trink viel Wasser" << std::endl;
}
std::cout << "Schönen Tag noch" << std::endl;Das gibt 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 benutzen Programmierer sie immer. Du musst keine Leerzeichen zählen. Wenn du nach einer { 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.
Da 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) {
std::cout << "Es ist sehr heiß" << std::endl;
}
std::cout << "Trink viel Wasser" << std::endl;Das gibt 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 eine Anweisung direkt nach der Bedingung zum if:
int temperatur = 20;
if (temperatur > 30)
std::cout << "Es ist sehr heiß" << std::endl;
std::cout << "Trink viel Wasser" << std::endl;Dieser Code gibt ebenfalls Trink viel Wasser aus, denn die zweite Zeile gehört nicht zur Bedingung, wie auch immer sie eingerückt ist. Deshalb schreibt dieser Kurs die geschweiften Klammern immer, auch um eine einzelne Anweisung.
Vergisst du die schließende Klammer }, meldet der Compiler error: expected '}'. Der Fehler zeigt auf das Ende des Programms, weil der Compiler erst dort merkt, dass eine Klammer fehlt. Suche sie aber weiter oben: nach der letzten Zeile des Blocks, den du nicht geschlossen hast.
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
Ladegerät anschließenausgibt, ist eingerückt, steht aber nach der}. Verschiebe die}unter sie, sodass 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 Ladegerät anschließen Akku: 15%