10.11 Kontrollierte Sprünge
 
Es gibt vier Möglichkeiten, eine Ablaufstruktur, wie etwa Schleifen, Funktionen, Bedingungen oder gar das Programm, unmittelbar zu verlassen. Über sie kann aber nicht in eine bestimmte Anweisung verzweigt werden, sondern lediglich zur nächsten Ablaufstruktur.
|
continue – damit beenden Sie bei Schleifen nur den aktuellen Schleifendurchlauf. |
|
break – beendet die Schleife oder eine Fallunterscheidung. Befindet sich break in mehreren geschachtelten Schleifen, wird nur die innerste verlassen. |
|
exit – beendet das komplette Programm. |
|
return – beendet die Iteration und die Funktion, in der return aufgerufen wird. Im Fall der main()-Funktion würde dies das Ende des Programms bedeuten. |
Es sei angemerkt, dass exit und return keine schleifentypischen Anweisungen sind, im Gegensatz zu break und continue. Auf continue und break soll noch etwas genauer eingegangen werden.
10.11.1 continue
 
Die continue-Anweisung beendet nur die aktuelle Schleifenausführung. Das bedeutet, dass ab dem Aufruf von continue im Anweisungsblock der Schleife alle anderen Anweisungen übersprungen werden und die Programmausführung zur Schleife mit der nächsten Ausführung zurückspringt:
/* continue1.c */
#include <stdio.h>
int main(void) {
int i;
for(i = 1; i <= 20; i++) {
if(i % 2) /* Rest bedeutet ungerade Zahl */
continue; /* printf überspringen */
printf("%d ", i);
}
printf("\n");
return 0;
}
Bei diesem Beispiel überprüfen Sie, ob es sich bei der Variable i um eine ungerade Zahl handelt. In diesem Fall wird die continue-Anweisung ausgeführt. Die printf-Anweisung wird dabei übersprungen, und es geht zum nächsten Schleifendurchlauf. Die Ausgabe des Programms bestätigt Ihnen, dass nur die geraden Zahlen durchkommen. So konnten Sie sich mit continue praktisch eine else-Anweisung ersparen.
Bitte achten Sie bei continue auf die folgenden eventuell ungünstigen Seiteneffekte:
/* continue2.c */
#include <stdio.h>
int main(void) {
int i=2;
while(i <= 10) {
if(i % 2) /* Rest bedeutet ungerade Zahl */
continue; /* printf überspringen */
printf("%d ", i);
i++;
}
return 0;
}
Dieses Programm hätte dasselbe ausführen sollen wie schon das Programmbeispiel zuvor. Mit dem Unterschied, dass es sich hier um eine Endlosschleife handelt. Denn sobald
if(i % 2)
wahr ist, also der Wert ungerade ist, springt das Programm wieder zum Schleifenanfang. Die Iteration (i++) wird danach nie mehr ausgeführt, da sich der Wert der Variable i nicht mehr ändern kann und somit immer ungerade bleibt.
10.11.2 break
 
Bisher haben Sie die break-Anweisung nur bei der switch case-Verzweigung verwendet. Mit break können aber auch Schleifen vorzeitig beendet werden, allerdings sollte dies nur ausnahmsweise erfolgen. Denn im Regelfall sollten Sie eine Schleife immer mit einer Bedingung beenden.
Achtung Ein oft gemachter Fehler ist das Setzen von break in einer verschachtelten Schleife. Wenn break in der innersten Schleife verwendet wird, wird auch nur diese Schleife abgebrochen.
|
|