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 todayWyzwanie
ŁatwyUtwórz program w języku C, który definiuje enum dla kolorów sygnalizacji świetlnej i pokazuje jego użycie. Twój program powinien:
- Zdefiniować
enumo nazwieTrafficLightz następującymi stałymi w tej dokładnej kolejności:REDYELLOWGREEN
- W funkcji main:
- Zadeklarować zmienną typu
enum TrafficLighto nazwiecurrentLight - Wczytać z wejścia liczbę całkowitą reprezentującą stan sygnalizacji świetlnej (0, 1 lub 2)
- Przypisać odpowiednią wartość enum do
currentLightna 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
- Jeśli dane wejściowe mają wartość 0, przypisać
- 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
- Jeśli
- Obliczyć i wyświetlić następne światło w sekwencji:
- Jeśli bieżące światło to
RED(0), następne toGREEN(2) - Jeśli bieżące światło to
YELLOW(1), następne toRED(0) - Jeśli bieżące światło to
GREEN(2), następne toYELLOW(1)
- Jeśli bieżące światło to
- Wyświetlić następne światło w tym dokładnym formacie:
Next light: [enum_name]
- Zadeklarować zmienną typu
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;
}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
1Podstawy wskaźników
Czym jest wskaźnik?Deklarowanie wskaźnikówOperator pobrania adresu (&)Operator dereferencji (*)Wskaźniki NULLPodsumowanie: podstawy wskaźników4Projekt: Proste narzędzie tekstowe
Przegląd projektuLiczenie znaków7Struktury (struct)
Czym jest struktura?Deklarowanie strukturyTworzenie zmiennych strukturyDostęp do składowych strukturyInicjalizacja strukturPodsumowanie: struktura danych studenta10Enum i typedef
enum dla nazwanych stałychDeklarowanie i używanie enumEnum w instrukcjach switchUżywanie typedef do tworzenia aliasów typówtypedef ze strukturamiPowtórka: ćwiczenia z typedef i enum2Wskaźniki i tablice
Nazwy tablic jako wskaźnikiElementy tablic — wskaźnikiArytmetyka wskaźnikówPorównywanie wskaźnikówPodsumowanie: przechodzenie po tablicy za pomocą wskaźników5Wskaźniki i funkcje
Przekazywanie przez wartośćPrzekazywanie wskaźników do funkcjiModyfikowanie zmiennych za pomocą wskaźnikówKlasyczny przykład: zamianaPrzekazywanie tablic do funkcjiPowtórka: argumenty wskaźnikowe funkcji8Struktury i wskaźniki
Wskaźniki do strukturOperator strzałki (->)Przekazywanie struktur przez wartośćPrzekazywanie wskaźników do strukturDynamiczna alokacja strukturPodsumowanie: modyfikowanie struktury — wskaźnik11Końcowe zadania powtórkowe
Powtórka: dynamiczne łączenie ciągów znakówPowtórka: tablica strukturPowtórka: licznik częstotliwości słów3Tablice znaków i ciągi znaków
Ciągi znaków jako tablice charZnak końca ciąguWczytywanie ciągu za pomocą scanfUżywanie strlen()Używanie strcpy()Używanie strcat()Używanie strcmp()Podsumowanie: podstawowe funkcje do obsługi ciągów znakówPoćwicz samodzielnie: Kompilator C online