Kapitel 3 Unit 5 von 5 Theorie + Übungen Dauer: ~45 Min.
Ömer
Ömer sagt:

Manchmal willst du eine Schleife mittendrin beenden – das ist break. Oder du willst den aktuellen Durchlauf überspringen – das ist continue. Zwei mächtige Werkzeuge, die du kennen musst! ⚡

break – Schleife verlassen continue – Durchlauf überspringen Unterschied break vs. continue Typische Schleifenfehler Off-by-One Fehler

⛔ break – Schleife sofort verlassen

break beendet die Schleife sofort – unabhängig von der Bedingung. Das Programm macht nach der Schleife weiter:

break_demo.cC
for (int i = 1; i <= 10; i++) {
    if (i == 5) {
        printf("Stopp bei %d!\n", i);
        break;   // Verlässt die Schleife sofort
    }
    printf("%d\n", i);
}
printf("Nach der Schleife.\n");
▶ Ausgabe
1
2
3
4
Stopp bei 5!
Nach der Schleife.

⏭️ continue – Durchlauf überspringen

continue springt zum nächsten Durchlauf – der Rest des aktuellen Körpers wird übersprungen:

continue_demo.cC
for (int i = 1; i <= 10; i++) {
    if (i % 2 == 0) {
        continue;  // Gerade Zahlen überspringen
    }
    printf("%d\n", i);  // Nur ungerade!
}
▶ Ausgabe
1
3
5
7
9

⚖️ break vs. continue

⛔ break

Verlässt die gesamte Schleife. Das Programm macht nach der schließenden } weiter. Wie eine Notbremse.

Einsatz: Suche – wenn gefunden, abbrechen.

⏭️ continue

Überspringt nur den aktuellen Durchlauf. Die Schleife läuft weiter. Wie ein „Nächster bitte."

Einsatz: Bestimmte Werte filtern.

🐛 Typische Schleifenfehler

FehlerBeispielProblemLösung
Endlosschleifewhile(1) ohne breakProgramm hängtBedingung korrekt setzen
Off-by-Onei < 10 statt i <= 101 Durchlauf zu wenigGrenze genau prüfen
Zähler nicht updateni++ vergessenEndlosschleifeUpdate-Schritt einfügen
Falsche StartbedingungStartwert zu groß/kleinFalsche AnzahlStartwert prüfen
Semikolon nach forfor(...) ;Leere Schleife + Körper 1xKein ; nach for/while

🚨 Der gemeine Semikolon-Bug!

Ein versehentliches Semikolon nach for oder while erzeugt eine leere Schleife. Der eigentliche Block wird danach nur einmal ausgeführt:

for (int i=0; i<5; i++);  // ← Semikolon! Leere Schleife läuft 5 Mal
{
    printf("Nur einmal!\n");  // ← Wird nur EINMAL ausgegeben!
}

✏️ Übungen

Übung 1

Ausgabe vorhersagen

Was gibt dieser Code aus? (Ohne Computer ausprobieren!)

for (int i = 1; i <= 8; i++) {
    if (i == 3) continue;
    if (i == 6) break;
    printf("%d ", i);
}

Ausgabe:

Gehe Schritt für Schritt: Bei i=3 → continue (überspringen). Bei i=6 → break (verlassen).
Übung 2

Fehler finden

Finde und beschreibe den Fehler in jedem Code-Snippet:

A:

for (int i = 1; i < 10; i++);
    printf("%d\n", i);

B:

int x = 1;
while (x <= 10) {
    printf("%d\n", x);
}
Übung 3 – Programm

Erste Zahl durch 7 teilbar

Schreibe ein Programm, das mit einer for-Schleife von 1 bis 100 geht und die erste Zahl ausgibt, die durch 7 teilbar ist. Danach soll die Schleife abbrechen.

#include <stdio.h> int main() { for (int i = 1; i <= 100; i++) { if (/* durch 7 teilbar */) { printf("Erste durch 7 teilbare Zahl: %d\n", i); /* Schleife beenden */ } } return 0; }
Übung 4 – Kapitel-Abschluss

FizzBuzz

Das klassische Programmierproblem: Zahlen 1 bis 30. Für Vielfache von 3: „Fizz". Für Vielfache von 5: „Buzz". Für Vielfache von 3 und 5: „FizzBuzz". Sonst: die Zahl selbst.

#include <stdio.h> int main() { for (int i = 1; i <= 30; i++) { if (/* durch 3 und 5 teilbar */) { printf("FizzBuzz\n"); } else if (/* durch 3 teilbar */) { printf("Fizz\n"); } else if (/* durch 5 teilbar */) { printf("Buzz\n"); } else { printf("%d\n", i); } } return 0; }
Wichtig: Die Bedingung für FizzBuzz (durch 3 UND 5) muss als ERSTE geprüft werden!
Übung 5 – Bonus

Primzahl-Checker

Eine Primzahl ist nur durch 1 und sich selbst teilbar. Schreibe ein Programm, das prüft ob eine eingegebene Zahl eine Primzahl ist. Nutze break um die Schleife früh zu beenden:

#include <stdio.h> int main() { int n, ist_prim = 1; printf("Zahl prüfen: "); scanf("%d", &n); if (n < 2) { ist_prim = 0; } else { for (int i = 2; i * i <= n; i++) { if (n % i == 0) { ist_prim = 0; break; /* kein Teiler mehr nötig */ } } } if (ist_prim) printf("%d ist eine Primzahl.\n", n); else printf("%d ist KEINE Primzahl.\n", n); return 0; }
Trick: Teiler bis zur Wurzel von n prüfen reicht! Wenn i*i > n gibt es keine Teiler mehr. Teste mit 2, 7, 11, 15, 97.