Menu
Coddy logo textTech

Enums in Switch-Anweisungen

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

Eine der leistungsfähigsten Kombinationen in der C-Programmierung ist die Verwendung von enum-Werten mit switch-Anweisungen. Diese Paarung erzeugt eine außergewöhnlich lesbare und wartbare Kontrollflusslogik, die den Entscheidungsprozess Ihres Programms klar zum Ausdruck bringt.

Wenn du Enum-Konstanten als Fälle in einer switch-Anweisung verwendest, wird der Code selbstdokumentierend. Anstatt mysteriöse Zahlen wie case 0: oder case 5: zu sehen, siehst du aussagekräftige Namen, die ihren Zweck sofort vermitteln:

switch (day) {
    case MONDAY:
    case TUESDAY:
    case WEDNESDAY:
    case THURSDAY:
    case FRIDAY:
        printf("It's a weekday\n");
        break;
    case SATURDAY:
    case SUNDAY:
        printf("It's a weekend\n");
        break;
}

Dieser Ansatz macht deinen Code deutlich leichter verständlich und zu ändern. Jeder, der diesen Code liest, weiß sofort, wofür jeder Fall steht, und das Hinzufügen neuer Fälle oder das Ändern der Logik wird unkompliziert. Der Compiler hilft außerdem dabei, Fehler zu erkennen – wenn du eine Enum-Konstante falsch schreibst, erhältst du einen Kompilierungsfehler statt eines unbemerkten Fehlers.

challenge icon

Aufgabe

Einfach

Erstelle ein C-Programm, das ein enum mit einer switch-Anweisung verwendet, um ein einfaches Wetterberatungssystem zu erstellen. Dein Programm sollte:

  1. Ein enum namens WeatherCondition mit den folgenden Konstanten in genau dieser Reihenfolge definieren:
    • SUNNY
    • CLOUDY
    • RAINY
    • STORMY
    • SNOWY
  2. Eine Funktion namens getWeatherAdvice schreiben, die:
    • Einen Parameter vom Typ enum WeatherCondition namens weather entgegennimmt
    • Nichts zurückgibt (void)
    • Eine switch-Anweisung verwendet, um abhängig von der Bedingung wetterspezifische Ratschläge auszugeben:
      • Für SUNNY: Perfect day for outdoor activities! ausgeben
      • Für CLOUDY: Good day for a walk, no sun protection needed. ausgeben
      • Für RAINY: Don't forget your umbrella! ausgeben
      • Für STORMY: Stay indoors and avoid travel. ausgeben
      • Für SNOWY: Drive carefully and dress warmly. ausgeben
  3. Eine Funktion namens getActivitySuggestion schreiben, die:
    • Einen Parameter vom Typ enum WeatherCondition namens weather entgegennimmt
    • Nichts zurückgibt (void)
    • Eine switch-Anweisung verwendet, um Aktivitäten abhängig vom Wetter vorzuschlagen:
      • Für SUNNY: Suggested activity: Beach or hiking ausgeben
      • Für CLOUDY: Suggested activity: Photography or gardening ausgeben
      • Für RAINY: Suggested activity: Reading or indoor games ausgeben
      • Für STORMY: Suggested activity: Movie marathon ausgeben
      • Für SNOWY: Suggested activity: Skiing or hot cocoa ausgeben
  4. In der main-Funktion:
    • Eine Variable vom Typ enum WeatherCondition namens currentWeather deklarieren
    • Eine Ganzzahl aus der Eingabe lesen, die die Wetterbedingung darstellt (0, 1, 2, 3 oder 4)
    • Den entsprechenden enum-Wert abhängig von der Eingabe currentWeather zuweisen
    • Die aktuelle Wetterbedingung in genau diesem Format ausgeben: Current weather: [numeric_value]
    • Die Funktion getWeatherAdvice mit currentWeather aufrufen
    • Die Funktion getActivitySuggestion mit currentWeather aufrufen

Diese Herausforderung zeigt die Vorteile der Kombination von enums mit switch-Anweisungen, um lesbaren und wartbaren Code zu erstellen. Anstatt verwirrende numerische Fälle in deinen switch-Anweisungen zu verwenden, nutzt du aussagekräftige enum-Konstanten, die die Logik des Programms klar ausdrücken. Die switch-Anweisung wird dadurch selbstdokumentierend, sodass leicht verständlich ist, wofür jeder Fall steht und wie sich das Verhalten bei Bedarf ändern lässt.

Probier es selbst

#include <stdio.h>

// TODO: Definieren Sie hier das WeatherCondition-Enum

// TODO: Implementieren Sie hier die Funktion getWeatherAdvice

// TODO: Implementieren Sie hier die Funktion getActivitySuggestion

int main() {
    // Eingabe lesen
    int weatherInput;
    scanf("%d", &weatherInput);
    
    // TODO: Deklarieren Sie die Variable currentWeather und weisen Sie den Enum-Wert basierend auf der Eingabe zu
    
    // TODO: Geben Sie die aktuelle Wetterbedingung im Format "Current weather: [numeric_value]" aus
    
    // TODO: Rufen Sie die Funktion getWeatherAdvice auf
    
    // TODO: Rufen Sie die Funktion getActivitySuggestion auf
    
    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