Menu
Coddy logo textTech

Enum w instrukcjach switch

Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 57 z 63.

Jednym z najpotężniejszych połączeń w programowaniu w C jest używanie wartości enum wraz z instrukcjami switch. To połączenie tworzy wyjątkowo czytelną i łatwą w utrzymaniu logikę przepływu sterowania, która jasno wyraża proces podejmowania decyzji przez program.

Gdy używasz stałych wyliczeniowych jako przypadków w instrukcji switch, kod staje się samodokumentujący. Zamiast widzieć tajemnicze liczby, takie jak case 0: lub case 5:, widzisz znaczące nazwy, które od razu wskazują ich przeznaczenie:

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;
}

To podejście znacznie ułatwia zrozumienie i modyfikowanie kodu. Każdy, kto czyta ten kod, od razu wie, co oznacza każdy przypadek, a dodawanie nowych przypadków lub zmiana logiki staje się prosta. Kompilator pomaga też wychwytywać błędy — jeśli błędnie zapiszesz stałą wyliczeniową, pojawi się błąd kompilacji, a nie niezauważony błąd.

challenge icon

Wyzwanie

Łatwy

Stwórz program w języku C, który wykorzystuje typ wyliczeniowy enum i instrukcję switch do zbudowania prostego systemu udzielającego porad dotyczących pogody. Twój program powinien:

  1. Zdefiniować typ wyliczeniowy enum o nazwie WeatherCondition z następującymi stałymi w dokładnie tej kolejności:
    • SUNNY
    • CLOUDY
    • RAINY
    • STORMY
    • SNOWY
  2. Napisać funkcję o nazwie getWeatherAdvice, która:
    • Przyjmuje parametr typu enum WeatherCondition o nazwie weather
    • Nic nie zwraca (void)
    • Używa instrukcji switch, aby wyświetlić poradę dotyczącą pogody, zależnie od warunków:
      • Dla SUNNY: wyświetla Perfect day for outdoor activities!
      • Dla CLOUDY: wyświetla Good day for a walk, no sun protection needed.
      • Dla RAINY: wyświetla Don't forget your umbrella!
      • Dla STORMY: wyświetla Stay indoors and avoid travel.
      • Dla SNOWY: wyświetla Drive carefully and dress warmly.
  3. Napisać funkcję o nazwie getActivitySuggestion, która:
    • Przyjmuje parametr typu enum WeatherCondition o nazwie weather
    • Nic nie zwraca (void)
    • Używa instrukcji switch, aby zaproponować aktywności zależnie od pogody:
      • Dla SUNNY: wyświetla Suggested activity: Beach or hiking
      • Dla CLOUDY: wyświetla Suggested activity: Photography or gardening
      • Dla RAINY: wyświetla Suggested activity: Reading or indoor games
      • Dla STORMY: wyświetla Suggested activity: Movie marathon
      • Dla SNOWY: wyświetla Suggested activity: Skiing or hot cocoa
  4. W funkcji main:
    • Zadeklarować zmienną typu enum WeatherCondition o nazwie currentWeather
    • Odczytać z wejścia liczbę całkowitą reprezentującą warunki pogodowe (0, 1, 2, 3 lub 4)
    • Przypisać do currentWeather odpowiednią wartość typu wyliczeniowego na podstawie danych wejściowych
    • Wyświetlić aktualne warunki pogodowe w dokładnie takim formacie: Current weather: [numeric_value]
    • Wywołać funkcję getWeatherAdvice z argumentem currentWeather
    • Wywołać funkcję getActivitySuggestion z argumentem currentWeather

To wyzwanie pokazuje, jak połączenie typów wyliczeniowych z instrukcjami switch pozwala tworzyć czytelny i łatwy w utrzymaniu kod. Zamiast używać w instrukcjach switch nieczytelnych wartości liczbowych, użyjesz znaczących stałych typu wyliczeniowego, które jasno wyrażają logikę programu. Instrukcja switch staje się samodokumentująca, dzięki czemu łatwo zrozumieć, co reprezentuje każdy przypadek, i w razie potrzeby zmodyfikować działanie programu.

Spróbuj swoich sił

#include <stdio.h>

// TODO: Zdefiniuj tutaj typ wyliczeniowy WeatherCondition

// TODO: Zaimplementuj tutaj funkcję getWeatherAdvice

// TODO: Zaimplementuj tutaj funkcję getActivitySuggestion

int main() {
    // Odczytaj dane wejściowe
    int weatherInput;
    scanf("%d", &weatherInput);
    
    // TODO: Zadeklaruj zmienną currentWeather i przypisz jej wartość typu wyliczeniowego na podstawie danych wejściowych
    
    // TODO: Wypisz aktualne warunki pogodowe w formacie "Current weather: [numeric_value]"
    
    // TODO: Wywołaj funkcję getWeatherAdvice
    
    // TODO: Wywołaj funkcję getActivitySuggestion
    
    return 0;
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i sterowanie przepływem

Poćwicz samodzielnie: Kompilator C online