5.2    Die alternative Verzweigung

Mit einer Verzweigung können Sie festlegen, dass ein Programm in mehreren Abschnitten, die wiederum abhängig von einer Bedingung sind, ausgeführt wird. Damit können Sie im Programm auf unterschiedliche Ereignisse reagieren.

In der Praxis folgt häufig nach einer bedingten if-Anweisung eine optionale und alternative Verzweigung. Sie wird auf jeden Fall ausgeführt, wenn die if-Bedingung nicht erfüllt ist, also 0 zurückgegeben wurde. Realisiert wird dies durch die else-Verzweigung:

if(ausdruck) {
anweisung1;
}
else {
anweisung2;
}
anweisung3;

Hierbei wird zuerst die Bedingung ausdruck ausgewertet. Je nachdem, ob ausdruck wahr (ungleich 0) ist, wird die Anweisung anweisung1 im Anweisungsblock ausgeführt. Anschließend wird die Programmausführung mit der Anweisung anweisung3 fortgesetzt. Ist die Bedingung ausdruck allerdings unwahr (also gleich 0), wird die Anweisung anweisung2 im alternativen else-Anweisungsblock ausgeführt. Anschließend fährt das Programm mit der Anweisung anweisung3 fort.

Achtung: Kein else ohne if

Eine else-Alternative kann nur einer vorausgehenden if- oder else-if-Verzweigung folgen.

Abbildung 5.2 stellt diese if-Anweisung mit einer alternativen else-Verzweigung in einem Programmablaufplan schematisch dar.

Programmablaufplan einer if-Anweisung mit alternativer else-Verzweigung

Abbildung 5.2    Programmablaufplan einer if-Anweisung mit alternativer else-Verzweigung

Hierzu soll das Listing 5.1 um eine alternative else-Verzweigung erweitert werden:

00  // Kapitel5/else_beispiel.c
01 #include <stdio.h>

02 int main(void) {
03 int ival = 0;
04 printf("Bitte eine Ganzzahl eingeben: ");
05 int check = scanf("%d", &ival);
06 if( check == 1 ) {
07 printf("Ihre Eingabe: %d\n", ival);
08 }
09 else {
10 printf("Fehler bei der Eingabe!\n");
11 }
12 printf("Außerhalb der if-Verzweigung\n");
13 return 0;
14 }

In diesem Beispiel wird in Zeile (06) geprüft, ob der Rückgabewert von check gleich 1 ist und ob der geforderte Wert erfolgreich von scanf() eingelesen werden konnte. Ist dies der Fall, wird der Wert ausgegeben, und das Programm fährt in Zeile (12) mit der Ausführung fort. Ist der Wert von check nicht gleich 1, wurde entweder kein gültiger Wert, passend zum Umwandlungszeichen, eingegeben, oder es ist ein anderer Fehler bei scanf() aufgetreten, und es wurde EOF zurückgegeben. In beiden Fällen ist die if-Bedingung 0 (unwahr), weshalb die Ausführung des Programms in diesem Fall in den else-Block in Zeile (09) bis (11) verzweigt. Dort wird eine printf()-Anweisung ausgeführt, die den Hinweis ausgibt, dass bei der Eingabe ein Fehler aufgetreten ist.

Das Programm gibt bei der Ausführung z. B. Folgendes aus:

Bitte eine Ganzzahl eingeben: 1234
Ihre Eingabe: 1234
Außerhalb der if-Verzweigung

Bitte eine Ganzzahl eingeben: x
Fehler bei der Eingabe!
Außerhalb der if-Verzweigung