Menu
Coddy logo textTech

enum für benannte Konstanten

Teil des Abschnitts Logic & Flow der C-Journey von Coddy — Lektion 55 von 63.

Beim Schreiben von C-Programmen müssen Sie häufig mit Sätzen verwandter Konstantenwerte arbeiten. Beispielsweise müssen Sie möglicherweise Wochentage, Monate des Jahres oder verschiedene Zustände in einem Programm darstellen. Anstatt einfache Zahlen wie 0, 1, 2 zu verwenden, können Sie enum verwenden, um aussagekräftige Namen für diese Konstanten zu erstellen.

Ein Aufzählungstyp, oder enum, ermöglicht es Ihnen, eine Gruppe von benannten Ganzzahlkonstanten zu definieren. Dies macht Ihren Code wesentlich lesbarer und einfacher 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. Somit entspricht MONDAY 0, TUESDAY entspricht 1 und SUNDAY entspricht 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 Ihren Code selbstdokumentierend und hilft dabei, Fehler zu vermeiden, die auftreten können, wenn Sie Magic Numbers in Ihrem gesamten Programm verwenden.

Sie können Variablen vom Typ enum deklarieren und ihnen enum-Werte zuweisen:

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

Aufgabe

Einfach

Erstellen Sie ein C-Programm, das ein enum für Ampelfarben definiert und dessen Verwendung demonstriert. Ihr Programm sollte:

  1. Ein enum namens TrafficLight mit den folgenden Konstanten in genau dieser Reihenfolge definieren:
    • RED
    • YELLOW
    • GREEN
  2. In der main-Funktion:
    • Eine Variable vom Typ enum TrafficLight namens currentLight deklarieren
    • Einen Integer von der Eingabe lesen, der den Ampelzustand darstellt (0, 1 oder 2)
    • Den entsprechenden Enum-Wert basierend auf der Eingabe an currentLight zuweisen:
      • Wenn die Eingabe 0 ist, weisen Sie RED zu
      • Wenn die Eingabe 1 ist, weisen Sie YELLOW zu
      • Wenn die Eingabe 2 ist, weisen Sie GREEN zu
    • 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 basierend auf der aktuellen Ampel bestimmen und ausgeben:
      • Wenn RED: geben Sie Action: Stop aus
      • Wenn YELLOW: geben Sie Action: Caution aus
      • Wenn GREEN: geben Sie Action: Go aus
    • Die nächste Ampel in der Sequenz 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 reinen Zahlen. Anstatt sich merken zu müssen, dass 0 Rot, 1 Gelb und 2 Grün bedeutet, können Sie aussagekräftige Namen wie RED, YELLOW und GREEN verwenden. Sie üben das Definieren eines Enums, die Verwendung von Enum-Konstanten in Zuweisungen und Vergleichen sowie den Zugriff auf die zugrunde liegenden Integer-Werte von Enum-Konstanten.

Spickzettel

Ein enum ermöglicht es Ihnen, eine Gruppe von benannten Ganzzahlkonstanten zu definieren, wodurch der Code lesbarer wird als bei der Verwendung von reinen Zahlen:

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 entspricht MONDAY dem Wert 0, TUESDAY dem Wert 1 usw.

Sie können Variablen vom Typ enum deklarieren und ihnen enum-Werte zuweisen:

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

Probier es selbst

#include <stdio.h>

// TODO: Definiere hier das TrafficLight-Enum

int main() {
    // Eingabe lesen
    int input;
    scanf("%d", &input);
    
    // TODO: Deklariere die Variable currentLight und weise ihr basierend auf der Eingabe einen Enum-Wert zu
    
    // TODO: Aktuellen Ampelstatus ausgeben
    
    // TODO: Numerischen Wert ausgeben
    
    // TODO: Aktion basierend auf 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 Logic & Flow