break & Co.
-
Wenn es mehrere "for"-Schleifen gibt, bezieht sich die Anweisung "break" auf die innerste Schleife.
Z.B.for ( i = 0; i <= 10; i++) for( j = 0; j <= 10; j++){ if( i == 5){ break; printf("Die Schleife wurde abgebrochen"); } }
Dann bricht die "j"-Schleife ab, falls ich das richtig verstanden habe. Ich möchte allerdings die äußere Schleife abbrechen. In Java hätte ich z.B. das gemacht:
[b]loop1:[/b] for ( i = 0; i <= 10; i++) for( j = 0; j <= 10; j++){ if( i == 5){ break [b]loop1[/b]; printf("Die Schleife wurde abgebrochen"); } }
Gibt es in C eine Möglichkeit dies zu realisieren? Danke im Voraus!
-
Nicht, dass ich wüsste.
Aber man kann soetwas machen:
if( i == 5) { i = 11; break; printf("Die Schleife wurde abgebrochen"); }
-
Hm..daran habe ich auch schon mal gedacht. Habe gehofft, dass es doch was gibt.
-
Goto
-
Schleifen in eine Funktion auslagern und returnen?
-
Natürlich kann man das in C auch machen, und zwar mit der verpönten goto-Anweisung:
for ( i = 0; i <= 10; i++) for( j = 0; j <= 10; j++){ if( i == 5){ printf("Die Schleife wurde abgebrochen"); goto loop_end; /* <-- hier springt das Programm zum Label loop_end */ } } loop_end:
Das goto ist seit Jahren verpönt, aber in solchen Verschachtelungen hat es durchaus seine Berechtigung.
Achtung:
Das Label, in diesem Fall loop_end, muss mit einem Doppelpunkt und nicht mit einem Semikolon abgeschlossen werden und es muss sich im gleichen Scope befinden, kann also nicht in einer anderen Funktion stehen. Weiter ist zu beachten, dass der Name des Labels den gleichen Konventionen unterliegt wie die Namensgebung der Variabeln und das Label darf nicht einen schon vergebenen Namen haben (da sonst logischerweise ein Namenskonflikt ensteht).mfg
Sputnik