Menu
CoddyTech

enum für benannte Konstanten

Teil des Abschnitts Logik & Ablauf der C-Journey von Coddy. Lektion 55 von 63.

Beim Schreiben von C-Programmen musst du oft mit Gruppen zusammengehöriger konstanter Werte arbeiten. Zum Beispiel musst du vielleicht die Wochentage, die Monate des Jahres oder verschiedene Zustände in einem Programm darstellen. Statt rohe Zahlen wie 0, 1, 2 zu verwenden, kannst du mit enum aussagekräftige Namen für diese Konstanten erstellen.

Ein Aufzählungstyp oder enum ermöglicht es dir, eine Gruppe benannter ganzzahliger Konstanten zu definieren. Dadurch wird dein Code viel besser lesbar und leichter zu warten. Hier ist die grundlegende Syntax:

enum DayOfWeek {
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
};

Standardmäßig erhält der erste Name den Wert 0, der zweite den Wert 1 und so weiter. Also ist MONDAY gleich 0, TUESDAY gleich 1 und SUNDAY gleich 6. Dieser Ansatz ist viel klarer, als sich merken zu müssen, dass Tag 0 Montag oder Tag 6 Sonntag bedeutet.

Die Verwendung von enum macht deinen Code selbstdokumentierend und hilft, Fehler zu vermeiden, die auftreten können, wenn du im gesamten Programm magische Zahlen verwendest.

Du kannst Variablen vom Enum-Typ deklarieren und ihnen Enum-Werte zuweisen:

enum DayOfWeek today;
today = MONDAY;  // weist today den Wert 0 zu

Ein Enum-Wert ist eine Ganzzahl, daher gibt printf("%d\n", today); 0 aus. C behält die Namen nicht bei, wenn das Programm ausgeführt wird. Um also das Wort MONDAY auszugeben, vergleiche den Wert und gib den Text selbst aus:

if (today == MONDAY) {
    printf("MONDAY\n");
}
challenge icon

Aufgabe

Einfach

Erstelle ein C-Programm, das ein enum für Ampelfarben definiert und dessen Verwendung demonstriert. Dein Programm soll:

  1. Ein enum namens TrafficLight mit den folgenden Konstanten in genau dieser Reihenfolge definieren:
    • RED
    • YELLOW
    • GREEN
  2. In der Hauptfunktion:
    • Eine Variable vom Typ enum TrafficLight namens currentLight deklarieren
    • Eine Ganzzahl aus der Eingabe lesen, die den Ampelzustand darstellt (0, 1 oder 2)
    • Der Variable currentLight abhängig von der Eingabe den entsprechenden Enum-Wert zuweisen:
      • Wenn die Eingabe 0 ist, RED zuweisen
      • Wenn die Eingabe 1 ist, YELLOW zuweisen
      • Wenn die Eingabe 2 ist, GREEN zuweisen
    • Den aktuellen Ampelstatus in genau diesem Format ausgeben: Current light: [enum_name]
    • Den numerischen Wert der aktuellen Ampel in genau diesem Format ausgeben: Numeric value: [number]
    • Die Aktion abhängig von der aktuellen Ampel bestimmen und ausgeben:
      • Wenn RED: Action: Stop ausgeben
      • Wenn YELLOW: Action: Caution ausgeben
      • Wenn GREEN: Action: Go ausgeben
    • Die nächste Ampel in der Abfolge berechnen und ausgeben:
      • Wenn die aktuelle Ampel RED (0) ist, ist die nächste GREEN (2)
      • Wenn die aktuelle Ampel YELLOW (1) ist, ist die nächste RED (0)
      • Wenn die aktuelle Ampel GREEN (2) ist, ist die nächste YELLOW (1)
    • Die nächste Ampel in genau diesem Format ausgeben: Next light: [enum_name]

Diese Herausforderung zeigt, wie enum-Konstanten den Code lesbarer machen als die Verwendung von einfachen Zahlen. Anstatt dir merken zu müssen, dass 0 für Rot, 1 für Gelb und 2 für Grün steht, kannst du aussagekräftige Namen wie RED, YELLOW und GREEN verwenden. Du übst, ein Enum zu definieren, Enum-Konstanten in Zuweisungen und Vergleichen zu verwenden und auf die zugrunde liegenden Ganzzahlwerte von Enum-Konstanten zuzugreifen.

Probier es selbst

#include <stdio.h>

// TODO: Das TrafficLight-Enum hier definieren

int main() {
    // Eingabe einlesen
    int input;
    scanf("%d", &input);
    
    // TODO: Variable currentLight deklarieren und ihr anhand der Eingabe einen Enum-Wert zuweisen
    
    // TODO: Aktuellen Ampelstatus ausgeben
    
    // TODO: Numerischen Wert ausgeben
    
    // TODO: Aktion anhand der aktuellen Ampel ausgeben
    
    // TODO: Nächste Ampelphase berechnen und ausgeben
    
    return 0;
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf

Übe selbstständig: Online-C-Compiler