Les énumérations dans les instructions switch
Fait partie de la section Logic & Flow du Journey C de Coddy — leçon 57 sur 63.
L'une des combinaisons les plus puissantes en programmation C est l'utilisation de valeurs enum avec des instructions switch. Cette association crée une logique de flux de contrôle exceptionnellement lisible et facile à maintenir qui exprime clairement le processus de prise de décision de votre programme.
Lorsque vous utilisez des constantes d'énumération comme cas dans une instruction switch, le code devient auto-documenté. Au lieu de voir des nombres mystérieux comme case 0: ou case 5:, vous voyez des noms significatifs qui transmettent immédiatement leur but :
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;
}Cette approche rend votre code beaucoup plus facile à comprendre et à modifier. Quiconque lit ce code sait immédiatement ce que chaque cas représente, et l'ajout de nouveaux cas ou la modification de la logique devient simple. Le compilateur aide également à détecter les erreurs - si vous orthographiez mal une constante d'énumération, vous obtiendrez une erreur de compilation plutôt qu'un bogue silencieux.
Défi
FacileCréez un programme C qui utilise un enum avec une instruction switch pour construire un système simple de conseil météorologique. Votre programme doit :
- Définir un
enumnomméWeatherConditionavec les constantes suivantes dans cet ordre exact :SUNNYCLOUDYRAINYSTORMYSNOWY
- Écrire une fonction nommée
getWeatherAdvicequi :- Prend un paramètre
enum WeatherConditionnomméweather - Ne retourne rien (void)
- Utilise une instruction
switchpour afficher des conseils spécifiques à la météo basés sur la condition :- Pour
SUNNY: affichePerfect day for outdoor activities! - Pour
CLOUDY: afficheGood day for a walk, no sun protection needed. - Pour
RAINY: afficheDon't forget your umbrella! - Pour
STORMY: afficheStay indoors and avoid travel. - Pour
SNOWY: afficheDrive carefully and dress warmly.
- Pour
- Prend un paramètre
- Écrire une fonction nommée
getActivitySuggestionqui :- Prend un paramètre
enum WeatherConditionnomméweather - Ne retourne rien (void)
- Utilise une instruction
switchpour suggérer des activités basées sur la météo :- Pour
SUNNY: afficheSuggested activity: Beach or hiking - Pour
CLOUDY: afficheSuggested activity: Photography or gardening - Pour
RAINY: afficheSuggested activity: Reading or indoor games - Pour
STORMY: afficheSuggested activity: Movie marathon - Pour
SNOWY: afficheSuggested activity: Skiing or hot cocoa
- Pour
- Prend un paramètre
- Dans la fonction main :
- Déclarer une variable de type
enum WeatherConditionnomméecurrentWeather - Lire un entier depuis l'entrée représentant la condition météorologique (0, 1, 2, 3 ou 4)
- Assigner la valeur enum correspondante à
currentWeatherbasée sur l'entrée - Afficher la condition météo actuelle dans ce format exact :
Current weather: [numeric_value] - Appeler la fonction
getWeatherAdviceaveccurrentWeather - Appeler la fonction
getActivitySuggestionaveccurrentWeather
- Déclarer une variable de type
Ce défi démontre la puissance de la combinaison des enums avec les instructions switch pour créer un code lisible et facile à maintenir. Au lieu d'utiliser des cas numériques confus dans vos instructions switch, vous utiliserez des constantes enum significatives qui expriment clairement la logique du programme. L'instruction switch devient auto-documentée, ce qui permet de comprendre facilement ce que chaque cas représente et de modifier le comportement si nécessaire.
Aide-mémoire
L'utilisation de valeurs enum avec des instructions switch crée une logique de flux de contrôle lisible et facile à maintenir :
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;
}Cette approche rend le code auto-documenté en utilisant des noms significatifs au lieu de nombres mystérieux comme case 0: ou case 5:. Le compilateur aide à détecter les erreurs en générant des erreurs de compilation pour les constantes enum mal orthographiées plutôt que des bugs silencieux.
Essayez vous-même
#include <stdio.h>
// TODO: Définir l'énumération WeatherCondition ici
// TODO: Implémenter la fonction getWeatherAdvice ici
// TODO: Implémenter la fonction getActivitySuggestion ici
int main() {
// Lire l'entrée
int weatherInput;
scanf("%d", &weatherInput);
// TODO: Déclarer la variable currentWeather et assigner la valeur de l'énumération basée sur l'entrée
// TODO: Afficher la condition météo actuelle au format "Current weather: [numeric_value]"
// TODO: Appeler la fonction getWeatherAdvice
// TODO: Appeler la fonction getActivitySuggestion
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