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 zuAufgabe
EinfachErstellen Sie ein C-Programm, das ein enum für Ampelfarben definiert und dessen Verwendung demonstriert. Ihr Programm sollte:
- Ein
enumnamensTrafficLightmit den folgenden Konstanten in genau dieser Reihenfolge definieren:REDYELLOWGREEN
- In der main-Funktion:
- Eine Variable vom Typ
enum TrafficLightnamenscurrentLightdeklarieren - Einen Integer von der Eingabe lesen, der den Ampelzustand darstellt (0, 1 oder 2)
- Den entsprechenden Enum-Wert basierend auf der Eingabe an
currentLightzuweisen:- Wenn die Eingabe 0 ist, weisen Sie
REDzu - Wenn die Eingabe 1 ist, weisen Sie
YELLOWzu - Wenn die Eingabe 2 ist, weisen Sie
GREENzu
- Wenn die Eingabe 0 ist, weisen Sie
- 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 SieAction: Stopaus - Wenn
YELLOW: geben SieAction: Cautionaus - Wenn
GREEN: geben SieAction: Goaus
- Wenn
- Die nächste Ampel in der Sequenz berechnen und ausgeben:
- Wenn die aktuelle Ampel
RED(0) ist, ist die nächsteGREEN(2) - Wenn die aktuelle Ampel
YELLOW(1) ist, ist die nächsteRED(0) - Wenn die aktuelle Ampel
GREEN(2) ist, ist die nächsteYELLOW(1)
- Wenn die aktuelle Ampel
- Die nächste Ampel in genau diesem Format ausgeben:
Next light: [enum_name]
- Eine Variable vom Typ
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 zuProbier 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;
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logic & Flow
1Zeiger-Grundlagen
Was ist ein Zeiger?Zeiger deklarierenDer Adressoperator (&)Der Dereferenzierungsoperator (*)NULL-ZeigerZusammenfassung: Zeiger-Grundlagen4Projekt: Einfaches Text-Tool
ProjektübersichtZeichen zählen7Strukturen (structs)
Was ist ein Struct?Deklarieren eines StructsErstellen von Struct-VariablenZugriff auf Struct-MemberInitialisieren von StructsZusammenfassung: Studentendaten-Struct10Enums und typedef
enum für benannte KonstantenEnums deklarieren und verwendenEnums in Switch-Anweisungentypedef für Typ-Aliase verwendentypedef mit StructsWiederholung: Übung zu typedef & Enums2Pointer und Arrays
Array-Namen als PointerArray-Elemente - PointerPointer-ArithmetikPointer vergleichenWiederholung: Array-Durchlauf mit Pointern5Zeiger und Funktionen
Wertübergabe (Pass-by-Value)Zeiger an Funktionen übergebenVariablen über Zeiger ändernEin klassisches Beispiel: SwapArrays an Funktionen übergebenZusammenfassung: Zeiger als Funktionsargumente8Structs und Zeiger
Zeiger auf StructsDer Pfeiloperator (->)Structs per Wert übergebenÜbergabe von Struct-ZeigernDynamische Allokation von StructsZusammenfassung: Struct ändern - Ptr11Finale Wiederholungsaufgaben
Wiederholung: Dynamische String-KonkatenationWiederholung: Array von StructsWiederholung: Wortfrequenz-Zähler3Character-Arrays und Strings
Strings als char-ArraysDer Null-TerminatorString-Eingabe mit scanfVerwendung von strlen()Verwendung von strcpy()Verwendung von strcat()Verwendung von strcmp()Zusammenfassung: Grundlegende String-Funktionen