
Heute lernst du enum — eines meiner Lieblingsfeatures in C! Anstatt im Code mysteriöse Zahlen herumzuschleppen ("was war nochmal 3?"), gibst du deinen Zuständen echte Namen. Code der sich selbst erklärt ist guter Code. Los gehts! 🎯
Kurz-Referenz: enum Syntax
/* Deklaration ohne typedef */ enum Status { AKTIV, INAKTIV, GESPERRT }; /* 0, 1, 2 */ enum Status s = AKTIV; /* Deklaration mit typedef (empfohlen!) */ typedef enum { ROT, GELB, GRUEN } Farbe; Farbe ampel = GRUEN; /* kein "enum" nötig */ /* Explizite Werte */ typedef enum { MO=1, DI, MI, DO, FR, SA, SO } Wochentag; /* MO=1, DI=2, MI=3, DO=4, FR=5, SA=6, SO=7 */
✏️ Übungen
enum lesen – Werte bestimmen
Gegeben ist folgende Deklaration:
typedef enum { JAN=1, FEB, MAR, APR } Monat;
a) Welche Zahlenwerte haben FEB, MAR und APR?
| enum-Name | Zahlenwert | Deine Antwort |
|---|---|---|
| JAN | 1 (gegeben) | |
| FEB | ||
| MAR | ||
| APR |
b) Was gibt printf("%d", APR); aus?
c) Was ist der Unterschied zwischen JAN=1 und dem Standard (ohne =1)?
enum definieren – Jahreszeiten
Definiere ein typedef enum für die vier Jahreszeiten (FRUEHLING, SOMMER, HERBST, WINTER) und schreibe ein Programm, das alle vier Jahreszeiten mit ihrem Zahlenwert ausgibt.
Erwartete Ausgabe:
enum in switch – Ampelsteuerung
Das Gerüst einer Ampelsteuerung ist vorgegeben. Fülle die fehlenden switch-Cases aus. Für jede Ampelfarbe soll eine sinnvolle Nachricht ausgegeben werden.
Erwartete Ausgabe (Beispiel):
Vollständiges Programm – Wochentag-Checker
Schreibe ein vollständiges C-Programm mit:
- einem
typedef enum Wochentagmit MO bis SO (MO=1) - einer Funktion
int ist_wochenende(Wochentag t)die 1 zurückgibt wenn SA oder SO, sonst 0 - einer
main()-Funktion die alle 7 Tage durchläuft und ausgibt ob es ein Wochentag oder Wochenende ist
Erwartete Ausgabe:
for (tag = MO; tag <= SO; tag++) — weil enum intern int ist!Fehlercodes – enum als Fehlercode-System
In echten Programmen werden Fehlercodes oft als enum modelliert. Schreibe ein Programm mit:
- einem
typedef enum Fehlercodemit: KEIN_FEHLER=0, DATEI_FEHLER, SPEICHER_FEHLER, NETZ_FEHLER - einer Funktion
void zeige_fehler(Fehlercode code)die je nach code eine aussagekräftige Fehlermeldung ausgibt - einer
main()die alle 4 Fehlercodes testet
Fragen zum Nachdenken:
Warum ist es sinnvoll, KEIN_FEHLER den Wert 0 zu geben?
if (!code) schreiben.Spielstatus-Maschine
Simuliere einen einfachen Spielzyklus mit einem enum Spielstatus. Das Spiel soll folgende Zustände durchlaufen: MENU → SPIELEND → PAUSE → SPIELEND → GAME_OVER.
Schreibe eine Funktion void zeige_status(Spielstatus s) und simuliere in main() den Übergang durch alle Zustände mit einer Verzögerungsmeldung zwischen den Schritten.
Erwartete Ausgabe (Beispiel):
Erweiterung (optional):
- Füge einen Zähler hinzu, wie oft das Spiel im Zustand SPIELEND war
- Zeige den Zahlenwert jedes Zustands mit
printf("Status-Code: %d\n", zustand)an - Erweitere das enum um einen LADEN-Zustand zwischen MENU und SPIELEND
✅ Selbst-Checkliste nach diesen Übungen
- Ich kann den Zahlenwert eines enum-Eintrags bestimmen (mit und ohne expliziten Wert)
- Ich kann
typedef enumselbstständig deklarieren und verwenden - Ich kann enum-Werte in switch-case-Blöcken korrekt einsetzen
- Ich kann über alle Werte eines enum mit einer for-Schleife iterieren
- Ich verstehe warum KEIN_FEHLER=0 ein gutes Muster ist
- Ich kann eine einfache Zustandsmaschine mit enum modellieren