enum pour les constantes nommées
Fait partie de la section Logic & Flow du Journey C de Coddy — leçon 55 sur 63.
Lors de l'écriture de programmes en C, vous avez souvent besoin de travailler avec des ensembles de valeurs constantes liées. Par exemple, vous pourriez avoir besoin de représenter les jours de la semaine, les mois de l'année ou différents états dans un programme. Au lieu d'utiliser des nombres bruts comme 0, 1, 2, vous pouvez utiliser enum pour créer des noms significatifs pour ces constantes.
Un type énuméré, ou enum, vous permet de définir un groupe de constantes entières nommées. Cela rend votre code beaucoup plus lisible et plus facile à maintenir. Voici la syntaxe de base :
enum DayOfWeek {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
};Par défaut, le premier nom reçoit la valeur 0, le deuxième reçoit 1, et ainsi de suite. Ainsi, MONDAY est égal à 0, TUESDAY est égal à 1, et SUNDAY est égal à 6. Cette approche est bien plus claire que de se rappeler que le jour 0 signifie lundi ou que le jour 6 signifie dimanche.
L'utilisation de enum rend votre code auto-documenté et aide à prévenir les erreurs qui peuvent survenir lors de l'utilisation de nombres magiques tout au long de votre programme.
Vous pouvez déclarer des variables de type enum et leur assigner des valeurs enum :
enum DayOfWeek today;
today = MONDAY; // assigne 0 à todayDéfi
FacileCréez un programme C qui définit un enum pour les couleurs des feux de signalisation et démontre son utilisation. Votre programme doit :
- Définir un
enumnomméTrafficLightavec les constantes suivantes dans cet ordre exact :REDYELLOWGREEN
- Dans la fonction principale :
- Déclarer une variable de type
enum TrafficLightnomméecurrentLight - Lire un entier à partir de l'entrée représentant l'état du feu de signalisation (0, 1 ou 2)
- Attribuer la valeur d'énumération correspondante à
currentLighten fonction de l'entrée :- Si l'entrée est 0, attribuer
RED - Si l'entrée est 1, attribuer
YELLOW - Si l'entrée est 2, attribuer
GREEN
- Si l'entrée est 0, attribuer
- Afficher l'état actuel du feu dans ce format exact :
Current light: [enum_name] - Afficher la valeur numérique du feu actuel dans ce format exact :
Numeric value: [number] - Déterminer et afficher l'action basée sur le feu actuel :
- Si
RED: afficherAction: Stop - Si
YELLOW: afficherAction: Caution - Si
GREEN: afficherAction: Go
- Si
- Calculer et afficher le prochain feu dans la séquence :
- Si le feu actuel est
RED(0), le suivant estGREEN(2) - Si le feu actuel est
YELLOW(1), le suivant estRED(0) - Si le feu actuel est
GREEN(2), le suivant estYELLOW(1)
- Si le feu actuel est
- Afficher le prochain feu dans ce format exact :
Next light: [enum_name]
- Déclarer une variable de type
Ce défi démontre comment les constantes enum rendent le code plus lisible que l'utilisation de nombres bruts. Au lieu de se rappeler que 0 signifie rouge, 1 signifie jaune et 2 signifie vert, vous pouvez utiliser des noms significatifs comme RED, YELLOW et GREEN. Vous vous entraînerez à définir une énumération, à utiliser des constantes d'énumération dans des affectations et des comparaisons, et à accéder aux valeurs entières sous-jacentes des constantes d'énumération.
Aide-mémoire
Une enum vous permet de définir un groupe de constantes entières nommées, rendant le code plus lisible que l'utilisation de nombres bruts :
enum DayOfWeek {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
};Par défaut, le premier nom reçoit la valeur 0, le deuxième reçoit 1, et ainsi de suite. Ainsi, MONDAY est égal à 0, TUESDAY est égal à 1, etc.
Vous pouvez déclarer des variables de type enum et leur assigner des valeurs d'énumération :
enum DayOfWeek today;
today = MONDAY; // assigne 0 à todayEssayez vous-même
#include <stdio.h>
// TODO: Définir l'énumération TrafficLight ici
int main() {
// Lire l'entrée
int input;
scanf("%d", &input);
// TODO: Déclarer la variable currentLight et assigner la valeur de l'énumération basée sur l'entrée
// TODO: Afficher le statut actuel du feu
// TODO: Afficher la valeur numérique
// TODO: Afficher l'action basée sur le feu actuel
// TODO: Calculer et afficher le prochain feu
return 0;
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logic & Flow
1Les bases des pointeurs
Qu'est-ce qu'un pointeur ?Déclaration de pointeursL'opérateur d'adresse (&)L'opérateur de déréférencement (*)Pointeurs NULLRécapitulatif : Les bases des pointeurs4Projet : Utilitaire de texte simple
Présentation du projetCompter les caractères7Structures (structs)
Qu'est-ce qu'une Struct ?Déclarer une StructCréer des variables de type StructAccéder aux membres d'une StructInitialiser des StructsRécapitulatif : Struct de données étudiant10Énumérations et typedef
enum pour les constantes nomméesDéclarer et utiliser des énumérationsLes énumérations dans les instructions switchUtiliser typedef pour les alias de typestypedef avec les structuresRécapitulatif : Pratique de typedef et enum2Pointeurs et Tableaux
Noms de tableaux comme pointeursÉléments de tableau - PointeursArithmétique des pointeursComparaison de pointeursRécapitulatif : Parcours de tableau par pointeur5Pointeurs et fonctions
Passage par valeurPassage de pointeurs aux fonctionsModifier des variables via des pointeursUn exemple classique : SwapPassage de tableaux aux fonctionsRécapitulatif : Pointeurs comme arguments de fonction3Tableaux de caractères et chaînes
Les chaînes comme tableaux de charLe terminateur nulSaisie de chaînes avec scanfUtilisation de strlen()Utilisation de strcpy()Utilisation de strcat()Utilisation de strcmp()Récapitulatif : Fonctions de base sur les chaînes