Die for-Schleife
Die meisten Schleifen, die zählen, haben dieselben drei Teile: eine Variable, die vor der Schleife erstellt wird, eine Bedingung und eine Änderung am Ende des Blocks:
int zahl = 1; // Start
while (zahl <= 5) { // Bedingung
printf("%d\n", zahl);
zahl++; // Schritt
}Solches Zählen ist so häufig, dass C eine Schleife hat, die alle drei Teile in einer Zeile zusammenfasst: for:
for (int i = 1; i <= 5; i++) {
printf("%d\n", i);
}Beide Schleifen geben dasselbe aus:
1
2
3
4
5In den Klammern nach for stehen die drei Teile, getrennt durch Semikolons (;):
int i = 1ist der Start. Er erstellt die Schleifenvariable und wird nur einmal ausgeführt, ganz am Anfang.i <= 5ist die Bedingung. Sie wird vor jedem Durchlauf geprüft. Ist sie falsch, endet die Schleife.i++ist der Schritt. Er wird nach jedem Durchlauf ausgeführt, wenn der Block fertig ist.
Die Reihenfolge ist also: Start, Bedingung, Block, Schritt, Bedingung, Block, Schritt und so weiter. In unserer Schleife ist i gleich 1, 1 <= 5 ist wahr, der Block gibt 1 aus, der Schritt macht i zu 2, 2 <= 5 ist wahr, der Block gibt 2 aus … Nach der Ausgabe von 5 macht der Schritt i zu 6, 6 <= 5 ist falsch, und die Schleife endet.
Die Schleifenvariable heißt oft i, aber jeder Name ist erlaubt. Sie existiert nur innerhalb der Schleife. Wenn du i nach der Schleife verwendest, kennt der Compiler es nicht:
#include <stdio.h>
int main(void) {
for (int i = 1; i <= 3; i++) {
printf("%d\n", i);
}
printf("%d\n", i);
return 0;
}main.c:7:20: error: use of undeclared identifier 'i'
7 | printf("%d\n", i);
| ^
1 error generated.Ein undeclared identifier (nicht deklarierter Bezeichner) ist ein Name, den der Compiler an dieser Stelle nicht kennt. Wenn du den Wert nach der Schleife brauchst, verwende eine while-Schleife mit einer Variablen, die vor ihr erstellt wird, wie in den vorherigen Übungen. Dafür kann jede Schleife ihr eigenes i haben, denn jedes i verschwindet, wenn seine Schleife endet.
Trenne die drei Teile mit Semikolons, nicht mit Kommas. Bei Kommas, for (int i = 1, i <= 3, i++), wird der Compiler verwirrt und meldet gleich mehrere Fehler. Der erste, error: invalid '<=' at end of declaration; did you mean '='?, hilft nicht viel. Wenn ein Fehler auf eine Zeile mit for zeigt, prüfe zuerst die Semikolons.
for oder while? Verwende for, wenn du weißt, wie oft die Schleife läuft: von 1 bis 10 oder 7-mal für die Tage einer Woche. Verwende while, wenn du es nicht im Voraus weißt, zum Beispiel wenn du eine Zahl verdoppelst, bis sie größer als 1000 ist:
int zahl = 1;
int verdopplungen = 0;
while (zahl <= 1000) {
zahl = zahl * 2;
verdopplungen++;
}
printf("Verdopplungen: %d\n", verdopplungen);
printf("Zahl: %d\n", zahl);Verdopplungen: 10
Zahl: 1024So schreibst du es:
Anweisungen
- 1
Schreibe die
while-Schleife im Editor alsfor-Schleife mit der Variablenium. Lösche diewhile-Schleife und die Zeile, diezahlerstellt. Das Programm gibt weiterhin die Zahlen von 1 bis 5 aus. - 2
Ändere deine Schleife so, dass sie die Zahlen von 1 bis 10 ausgibt, einschließlich der 10.
- 3
Schreibe darunter eine zweite
for-Schleife, wieder mit der Variableni, die die Quadrate der Zahlen von 1 bis 5 ausgibt:1 x 1 = 1,2 x 2 = 4und so weiter bis5 x 5 = 25, jedes in einer eigenen Zeile. Das Quadrat kannst du direkt inprintfberechnen:i * i.