Die for Schleife verwenden wir, wenn die Anzahl der Durchläufe bekannt ist. D.h. es ist eine Zähler-gesteuerte Schleife. Wir benötigen also immer eine Variable, welche wir zum Zählen der Durchläufe verwenden. Üblicherweise benennt man diese Zähl-Variablen beginnend mit dem Alphabetbuchstaben i, also i, j, k, etc.
In dem folgenden Beispiel wollen wir erneut die Zahlen von 1 bis 5 auf dem Bildschirm ausgeben. Die Schleife leiten wir mit dem Schlüsselwort for ein. In den Klammern gibt es drei Bereiche, welche durch einen Strichpunkt ; getrennt sind:
- Bereich 1: Startwert der Zählvariablen setzen, z.B. i=0
- Bereich 2: Durchlauf-Bedingung, z.B. i<5
- Bereich 3: Operation auf Zählvariable ausführen, z.B. i++
int i; for(i=0; i<5; i++) { printf("Zahl %d\n", i+1); }
Zahl 1 Zahl 2 Zahl 3 Zahl 4 Zahl 5
Das Setzen des Startwertes wird als erstes beim Ausführen der Schleife gemacht. Danach wird die Durchlauf-Bedingung in Bereich 2 geprüft. Ist diese wahr, wird der Block zwischen { } ausgeführt. Ist der Block abgearbeitet, springt das Programm wieder nach oben zum Kontrollpunkt und führt den Code in Bereich 3 aus. Dort wird üblicherweise die Zählvariable inkrementiert oder dekrementiert. Vor dem erneuten Durchlauf wird wieder die Durchlauf-Bedingung geprüft, usw.
Das Zählen beginnt mit 0
In der Informatik beginnt das Zählen nicht mit 1, sondern mit 0. Deshalb sollte man auch bei den Zählvariablen bei 0 beginnen. Somit muss bei unserem Programm „Ausgabe der Zahlen von 1 bis 5“ die Durchlauf-Bedingung von i<=5 auf i<5 angepasst werden. Weiters muss dadurch bei der Ausgabe der Wert um eins erhöht ausgegeben werden (i+1).
Verschachtelung
Schleifen können auch beliebig verschachtelt werden. Hier gibt z.B. die äußere Schleife an, dass 10 Zeilen ausgegeben werden. In jeder Zeile geben wir mittels der inneren Schleife Sternchen aus, welche am Ende eine Dreiecksform ergeben sollen. Die Durchlauf-Bedingung der inneren Schleife ist mit j<i an die äußere Schleife gebunden.
int i, j; // Schleife fuer die Zeilen for(i=0; i<10; i++) { printf("\nZeile %2d: ", i+1); // Schleife fuer die Spalten for(j=0; j<=i; j++) { printf("*"); } } printf("\n");
Zeile 1: * Zeile 2: ** Zeile 3: *** Zeile 4: **** Zeile 5: ***** Zeile 6: ****** Zeile 7: ******* Zeile 8: ******** Zeile 9: ********* Zeile 10: **********