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

Das letzte Tool von Kapitel 2: switch-case! Wenn du viele Fälle hast (z.B. Menü-Optionen, Wochentage, Notengrade), ist switch viel übersichtlicher als viele else-if-Ketten. Das lernst du heute! 🎛️

switch-Syntax verstehen case und break korrekt setzen default als Auffangnetz Fall-Through kennen switch vs. if-else vergleichen

🎛️ switch-case – Grundaufbau

switch vergleicht einen int- oder char-Ausdruck mit mehreren Konstanten (case-Werten). Das break am Ende jedes Falls verhindert, dass die folgenden Cases auch ausgeführt werden:

switch_syntax.cC
switch (ausdruck) {
    case wert1:
        // Code für wert1
        break;          // verlässt den switch-Block
    case wert2:
        // Code für wert2
        break;
    default:
        // Code wenn kein case passt
        break;
}

💻 Praxisbeispiel: Wochentag

wochentag.cC
#include <stdio.h>
int main() {
    int tag;
    printf("Tag (1-7): "); scanf("%d", &tag);

    switch (tag) {
        case 1: printf("Montag
");     break;
        case 2: printf("Dienstag
");   break;
        case 3: printf("Mittwoch
");   break;
        case 4: printf("Donnerstag
"); break;
        case 5: printf("Freitag
");    break;
        case 6: printf("Samstag
");    break;
        case 7: printf("Sonntag
");    break;
        default: printf("Ungültige Eingabe!
"); break;
    }
    return 0;
}
▶ Ausgabe bei Eingabe: 3
Mittwoch

⚠️ Fall-Through – wenn break fehlt

❌ Ohne break – Fall-Through!

switch (x) {
  case 1:
    printf("Eins
");
    // kein break!
  case 2:
    printf("Zwei
");
    break;
}

Bei x=1: gibt BEIDE aus!

✅ Gezieltes Fall-Through

switch (monat) {
  case 1: case 3: case 5:
  case 7: case 8: case 10:
  case 12:
    printf("31 Tage
"); break;
  case 2:
    printf("28/29 Tage
"); break;
}

⚡ switch vs. if-else – Wann was?

SituationBesser
Exakte Gleichheit mit Konstanten (1, 2, 3...)switch
Bereiche prüfen (x > 0, x < 100)if-else
Viele Menü-Optionenswitch
Komplexe kombinierte Bedingungen (&&, ||)if-else
float-Werte vergleichenif-else ✅ (switch nur int/char)

✏️ Übungen

Übung 1

break-Analyse

Was gibt dieses Programm aus, wenn n = 2 ist? (Achtung: Kein break nach case 2!)

C
switch (n) {
    case 1: printf("Eins
"); break;
    case 2: printf("Zwei
");
    case 3: printf("Drei
"); break;
    default: printf("Andere
"); break;
}

Ausgabe:

Wenn break fehlt, „fällt" das Programm in den nächsten case!
Übung 2

switch schreiben

Schreibe einen switch-Block, der eine Zahl 1–4 einliest und die entsprechende Jahreszeit ausgibt (1=Frühling, 2=Sommer, 3=Herbst, 4=Winter). Ungültige Zahlen sollen eine Fehlermeldung ausgeben.

#include <stdio.h> int main() { int jahreszeit; printf("Jahreszeit (1-4): "); scanf("%d", &jahreszeit); switch (jahreszeit) { /* Hier deine cases */ } return 0; }
Übung 3 – Abschlussprojekt Kapitel 2

Taschenrechner-Menü

Schreibe einen einfachen Taschenrechner: Zwei Zahlen einlesen, dann Operator wählen (+, -, *, /). Nutze switch für den Operator und if für die Überprüfung ob Divisor ≠ 0.

#include <stdio.h> int main() { float a, b, ergebnis; char op; printf("Zahl 1: "); scanf("%f", &a); printf("Operator (+,-,*,/): "); scanf(" %c", &op); printf("Zahl 2: "); scanf("%f", &b); switch (op) { /* +, -, *, / implementieren */ /* Bei / auf Division durch 0 prüfen! */ } return 0; }
Für char-Werte in switch: case '+': – in einfachen Anführungszeichen!
Übung 4 – Bonus

Wochentag-Übersetzer

Schreibe ein Programm das eine Zahl (1–7) einliest und den deutschen Wochentag ausgibt. Zahlen außerhalb 1–7 sollen eine Fehlermeldung erzeugen. Nutze switch – kein if-else!

#include <stdio.h> int main() { int tag; printf("Wochentag (1=Mo, 7=So): "); scanf("%d", &tag); switch (tag) { case 1: printf("Montag\n"); break; case 2: printf("Dienstag\n"); break; /* Mittwoch bis Sonntag hier ergaenzen */ default: printf("Ungueltige Eingabe!\n"); } return 0; }
💡 Vergiss break; nicht – sonst fällt das Programm in den nächsten case durch (fall-through)!
Übung 5 – Challenge

Fall-Through bewusst einsetzen

Manchmal ist Fall-Through nützlich! Schreibe ein Programm das für 1–5 "Wochentag", für 6–7 "Wochenende" ausgibt – ohne break zwischen 1 und 5:

#include <stdio.h> int main() { int tag; printf("Tag (1-7): "); scanf("%d", &tag); switch (tag) { case 1: case 2: case 3: case 4: case 5: printf("Wochentag\n"); break; case 6: case 7: printf("Wochenende!\n"); break; default: printf("Ungueltig!\n"); } return 0; }
Das bewusste Weglassen von break zwischen Cases nennt man Fall-Through – ein mächtiges, aber fehleranfälliges Muster. Immer kommentieren!