Verzweigungen
Verzweigungen werden dazu verwendet, um den Programmfluss zu steuern. Bei einer Verzweigung, auch als Fallunterschied bekannt, wird die Gültigkeit einer Bedingung geprüft. Abhängig vom Ergebnis wird dann der entsprechende Anweisungsteil ausgeführt.
if
Die am häufigsten eingesetzte Fallunterscheidung ist die "if
"-Bedingung (if = wenn).
Bei der "if
"-Bedingung wird der Ausdruck in Klammern ausgewertet.
Wenn das Ergebnis wahr, also nicht 0 ist, wird der Anweisungsblock ausgeführt.
int main() {
int alter = 20;
if (alter >= 18) {
printf("Volljährig");
}
}
Die Fallunterscheidung prüft, ob der Wert der Variable "alter" größer oder gleich dem Wert "18" ist. Weil die Bedingung wahr ist, wird der Programmteil zwischen den geschweiften Klammern ausgeführt. Eine allgemeinsprachliche Bedeutung lautet: "Wenn, Dann". Zwischen den geschweiften Klammern dürfen beliebig viele Anweisungen stehen, die alle abgearbeitet werden.
Ein Schritt weiter geht die Fallunterscheidung mittels "if-else
".
Diese Fallunterscheidung ist mit dem Sprachgebrauch: "Wenn, Dann, Ansonsten" gleich zu setzen (else = sonst).
Auch hier wird der Ausdruck in den Klammern geprüft.
Wenn der Wert wahr (nicht 0) ist, dann wird der erste Teil der Fallunterscheidung ausgeführt, ansonsten der zweite Teil (der Anweisungsblock hinter dem Schlüsselwort else).
int main() {
int alter = 10;
if (alter >= 18) {
printf("Volljährig");
} else {
printf("nicht Volljährig");
}
}
Diese Kontrollstruktur kann noch weiter verfeinert werden, indem als dritte Variante die "else if
"-Bedingung verwendet wird.
Diese ist mit dem Sprachgebrauch: "Wenn, Dann, Oder, Ansonsten", zu verstehen.
Dafür ist es erforderlich, eine wiederholte Prüfung der Bedingung in Klammern zu schreiben, wenn diese jetzt wahr ist wird das Programm in den Abzweig verweisen und die Anweisungen werden abarbeiten.
Im folgenden Fall erwarten wir wieder eine Zahl, aber hier überprüfen wir, ob es sich um eine positive Zahl, eine negative Zahl oder der Zahl 0 handelt.
int main() {
int zahl = -5;
if (zahl > 0) {
printf("positive Zahl");
} else if (zahl < 0) {
printf("negative Zahl");
} else {
printf("die Zahl ist 0");
}
}
Die "else if
"-Bedingung kann beliebig oft in einem Fallunterschied eingesetzt werden.
Die Reihenfolge der Schlüsselwörter muss nur immer die Gleiche sein.
Zuerst wird mit "if
" der Ausdruck geprüft, dann werden mit beliebig vielen "else if
"-Bedingungen weitere Ausdrücke geprüft, wenn kein Ausdruck wahr ist, wird das Programm nach dem Schlüsselwort "else
" in die Fallunterscheidung einsteigen und die Anweisungen abarbeiten.
int main() {
int quartal = 3;
if (quartal < 2) {
printf("erstes Quartal");
} else if (quartal < 3) {
printf("zweites Quartal");
} else if (quartal < 4) {
printf("drittes Quartal");
} else {
printf("viertes Quartal");
}
}
Achtung!
Hier ist die logische Reihenfolge zwingend zu beachten.
Wenn als Erstes abgefragt wird, ob der Wert kleiner als "4" ist, dann ist der Ausdruck auch wahr, wenn eine "1" eingegeben wird. Das Programm liest sich von oben nach unten. Wenn die erste Bedingung wahr ist, wird der entsprechende Anweisungsblock ausgeführt, alle anderen Bedingungen werden erst gar nicht mehr betrachtet und das Programm nimmt die Arbeit direkt nach der Fallunterscheidung wieder auf.
Die Fallunterscheidung mit "if
" kann auch innerhalb einer Fallunterscheidung erstellt werden.
int main() {
int zahl = 80;
if (zahl < 100) {
printf("Die Zahl ist kleiner als 100\n");
if (zahl > 50) {
printf("Aber die Zahl ist größer als 50\n");
} else {
printf("Und die Zahl ist kleiner als 50");
}
} else {
printf("Die Zahl ist Größer als 100");
}
}
switch case
Wenn ein Ausdruck eine Variable auf einen bestimmten Wert und nicht auf einen Wertbereich prüfen soll, dann bietet sich meistens der Fallunterschied durch "switch
" (Schalter)-"case
" (Fall) an.
Bei dem "switch-case
" Fallunterschied handelt es sich sozusagen um viele aneinandergereihte "if-else"-Bedingungen, die etwas übersichtlicher zusammengefasst wurden.
int main() {
int wochentag = 3;
switch(wochentag) {
case 1: printf("Es ist Montag");
break;
case 2: printf("Es ist Dienstag");
break;
case 3: printf("Es ist Mittwoch");
break;
case 4: printf("Es ist Donnerstag");
break;
case 5: printf("Es ist Freitag");
break;
case 6: printf("Juhu...\n");
case 7: printf("...Wochenende");
break;
default: printf("Kein Wochentag!");
}
}
Das Schlüsselwort "break
" sorgt dafür, dass die Anweisungen an dieser Stelle beendet werden und der Programmfluss nach der Fallunterscheidung weitergeführt wird.
Wenn das Schlüsselwort "break
" nicht gesetzt ist, wird das Programm alle Anweisungen von allen nachfolgenden "case
" mit verarbeiten.
Ein Beispiel dazu ist "case 6
", hier wird mit Absicht das Schlüsselwort "break
" weggelassen, damit das Programm die Anweisung von "case 7
" auch mit abarbeitet.
Für den Fall, dass kein Ausdruck zutrifft, wird das Schlüsselwort "default
" eingesetzt.
Hier könnte eine Fehlermeldung ausgegeben werden, die bei dem weiteren Ablauf nützlich sein könnte, vergleichbar mit dem "else
" auf "if-else
".
Weiter mit Schleifen