Menu
Coddy logo textTech

enum dla nazwanych stałych

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

Podczas pisania programów w C często trzeba pracować ze zbiorami powiązanych stałych wartości. Na przykład możesz potrzebować reprezentować dni tygodnia, miesiące roku lub różne stany w programie. Zamiast używać surowych liczb, takich jak 0, 1, 2, możesz użyć enum, aby utworzyć znaczące nazwy dla tych stałych.

Typ wyliczeniowy, czyli enum, pozwala zdefiniować grupę nazwanych stałych całkowitych. Dzięki temu kod jest znacznie bardziej czytelny i łatwiejszy w utrzymaniu. Oto podstawowa składnia:

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

Domyślnie pierwsza nazwa otrzymuje wartość 0, druga 1 i tak dalej. Zatem MONDAY jest równe 0, TUESDAY jest równe 1, a SUNDAY jest równe 6. Takie podejście jest znacznie bardziej przejrzyste niż zapamiętywanie, że dzień 0 oznacza poniedziałek, a dzień 6 — niedzielę.

Używanie enum sprawia, że kod sam się dokumentuje, i pomaga zapobiegać błędom, które mogą wystąpić, gdy w całym programie używasz magicznych liczb.

Możesz deklarować zmienne typu wyliczeniowego i przypisywać im wartości wyliczeniowe:

enum DayOfWeek today;
today = MONDAY;  // przypisuje wartość 0 zmiennej today
challenge icon

Wyzwanie

Łatwy

Utwórz program w języku C, który definiuje enum dla kolorów sygnalizacji świetlnej i pokazuje jego użycie. Twój program powinien:

  1. Zdefiniować enum o nazwie TrafficLight z następującymi stałymi w tej dokładnej kolejności:
    • RED
    • YELLOW
    • GREEN
  2. W funkcji main:
    • Zadeklarować zmienną typu enum TrafficLight o nazwie currentLight
    • Wczytać z wejścia liczbę całkowitą reprezentującą stan sygnalizacji świetlnej (0, 1 lub 2)
    • Przypisać odpowiednią wartość enum do currentLight na podstawie danych wejściowych:
      • Jeśli dane wejściowe mają wartość 0, przypisać RED
      • Jeśli dane wejściowe mają wartość 1, przypisać YELLOW
      • Jeśli dane wejściowe mają wartość 2, przypisać GREEN
    • Wyświetlić bieżący stan sygnalizacji w tym dokładnym formacie: Current light: [enum_name]
    • Wyświetlić wartość liczbową bieżącego światła w tym dokładnym formacie: Numeric value: [number]
    • Określić i wyświetlić działanie zależne od bieżącego światła:
      • Jeśli RED: wyświetlić Action: Stop
      • Jeśli YELLOW: wyświetlić Action: Caution
      • Jeśli GREEN: wyświetlić Action: Go
    • Obliczyć i wyświetlić następne światło w sekwencji:
      • Jeśli bieżące światło to RED (0), następne to GREEN (2)
      • Jeśli bieżące światło to YELLOW (1), następne to RED (0)
      • Jeśli bieżące światło to GREEN (2), następne to YELLOW (1)
    • Wyświetlić następne światło w tym dokładnym formacie: Next light: [enum_name]

To wyzwanie pokazuje, jak stałe enum sprawiają, że kod jest bardziej czytelny niż w przypadku używania surowych liczb. Zamiast pamiętać, że 0 oznacza czerwony, 1 żółty, a 2 zielony, możesz używać znaczących nazw, takich jak RED, YELLOW i GREEN. Przećwiczysz definiowanie enum, używanie stałych enum w przypisaniach i porównaniach oraz odczytywanie bazowych wartości całkowitych stałych enum.

Spróbuj swoich sił

#include <stdio.h>

// TODO: Zdefiniuj tutaj enum TrafficLight

int main() {
    // Odczytaj dane wejściowe
    int input;
    scanf("%d", &input);
    
    // TODO: Zadeklaruj zmienną currentLight i przypisz jej wartość enum na podstawie danych wejściowych
    
    // TODO: Wyświetl stan bieżącego światła
    
    // TODO: Wyświetl wartość liczbową
    
    // TODO: Wyświetl działanie zależne od bieżącego światła
    
    // TODO: Oblicz i wyświetl następne światło
    
    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