10.3 Die Verzweigung mit else
 
Eigentlich hätten Sie sich im vorangegangenen Programmbeispiel folgende Bedingung sparen können:
else if(alter == 18)
Denn wenn die Variable alter nicht größer als 18 und auch nicht kleiner als 18 ist, kann diese nur noch gleich 18 sein. Um sich eine solche Bedingung zu ersparen, gibt es die else-Verzweigung, was soviel heißt wie Ansonsten nimm mich oder Andernfalls tue das Folgende:
Sie könnten also die Zeile else if(alter == 18) ersetzen durch:
else {
printf("Den Führerschein schon bestanden?\n");
}
Die Syntax der if else-Verzweigung sieht folgendermaßen aus:
if(BEDINGUNG == wahr) {
Anweisung1;
}
else {
Anweisung2;
}
Sehen Sie sich hierzu auch den Programmablaufplan an:
 Hier klicken, um das Bild zu Vergrößern
Abbildung 10.4
Programmablaufplan mit else
Merke else folgt immer einem vorausgehenden if oder else if.
|
Umgeschrieben sieht das Listing jetzt wie folgt aus:
/* if4.c */
#include <stdio.h>
int main(void) {
unsigned int alter;
printf("Wie alt sind Sie: ");
scanf("%d", &alter);
if(alter < 18) {
printf("Sie sind noch nicht volljährig\n");
}
else if(alter > 18) {
printf("Sie sind volljährig\n");
}
else {
printf("Den Führerschein schon bestanden?\n");
}
printf("Bye\n");
return 0;
}
Jetzt haben Sie die einzelnen Bedingungen im Programm optimal gestellt. Wird z.B. für das Alter der Wert 16 eingegeben, führt das Programm den entsprechenden Anweisungsblock aus. Danach folgen keine weiteren Überprüfungen. Wird hingegen für das Alter der Wert 20 genannt, ersparen Sie sich wenigstens die letzte Überprüfung, ob das Alter gleich 18 ist, und entsprechender Anweisungsblock wird ausgeführt. Trifft keine dieser Bedingungen zu, wird der else-Anweisungsblock ausgeführt. Für das bessere Verständnis ein Programmablaufplan zu diesem Listing:
 Hier klicken, um das Bild zu Vergrößern
Abbildung 10.5
Programmablaufplan zum Listing
Ein häufig gemachter Fehler ist es, hinter eine Bedingungsanweisung ein Semikolon zu setzen:
else if(alter > 18); //Fehler (das Semikolon)
{
printf("Sie sind volljährig\n");
}
Der Compiler wird Ihnen in solchen Fällen dahingehend eine Fehlermeldung ausgeben, dass else hier fehl am Platz ist. Denn einer else-Verzweigung muss immer ein if bzw. else if vorausgehen. Sie können probeweise im Listing hinter der else-Verzweigung ein Semikolon setzen. Das Programm wird dann immer ausgeben, dass die Variable gleich 18 ist. Dies wird zusätzlich ausgegeben, auch wenn eine der vorangegangenen Bedingungen bereits wahr gewesen ist.
Es ist auch möglich, mehrere Anweisungen bzw. Anweisungsblöcke ineinander zu verschachteln. Das heißt, eine Anweisung mit Anweisungsblock steht innerhalb einer Anweisung mit Anweisungsblock. Ein Beispiel:
/* if5.c */
#include <stdio.h>
int main(void) {
unsigned int alter;
printf("Wie alt sind Sie: ");
scanf("%d", &alter);
if(alter <= 18) {
if(alter == 18) {
printf("Den Führerschein schon bestanden?\n");
}
else {
printf("Sie sind noch nicht volljährig\n");
}
}
else {
printf("Sie sind volljährig\n");
}
printf("Bye\n");
return 0;
}
Das Listing bewirkt das Gleiche wie schon das Beispiel zuvor. Mit der Anweisung
if(alter <= 18)
wird überprüft, ob alter kleiner oder gleich 18 ist. Sollte das der Fall sein, verzweigt das Programm weiter in den Anweisungsblock mit der Abfrage, ob alter gleich 18 ist. Wenn nicht, ist alter kleiner als 18. Sollte die Zahl aber größer als 18 sein, geht es gleich zur else-Verzweigung.
Wie Sie die Anweisungsblöcke anordnen, bleibt Ihnen letztlich selbst überlassen. Sehen Sie sich dennoch einmal folgendes (Negativ-)Beispiel an:
/* if6.c */
#include <stdio.h>
int main(void) {
unsigned int alter;
printf("Wie alt sind Sie: ");
scanf("%d", &alter);
if(alter <= 18){
if(alter == 18){
printf("Den Führerschein schon bestanden?\n");}
else{
printf("Sie sind noch nicht volljährig\n");
}}
else{printf("Sie sind volljährig\n");}
printf("Bye\n");
return 0;
}
Das Programm ist zwar nicht falsch, aber dennoch etwas unübersichtlich.
|