Enum nelle istruzioni switch
Fa parte della sezione Logica e flusso del percorso C di Coddy. Lezione 57 di 63.
Una delle combinazioni più potenti nella programmazione in C consiste nell'usare i valori di enum con le istruzioni switch. Questa combinazione crea una logica di flusso di controllo eccezionalmente leggibile e facile da mantenere, che esprime chiaramente il processo decisionale del programma.
Quando usi le costanti enum come casi in un'istruzione switch, il codice diventa autoesplicativo. Invece di vedere numeri misteriosi come case 0: o case 5:, vedi nomi significativi che ne comunicano immediatamente lo scopo:
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;
}Questo approccio rende il tuo codice molto più facile da capire e modificare. Chiunque legga questo codice capisce immediatamente cosa rappresenta ogni caso, e aggiungere nuovi casi o cambiare la logica diventa semplice. Il compilatore aiuta anche a individuare gli errori: se scrivi male una costante enum, riceverai un errore di compilazione anziché un bug silenzioso.
Sfida
FacileCrea un programma in C che utilizzi un enum con un’istruzione switch per realizzare un semplice sistema di consigli meteorologici. Il tuo programma deve:
- Definire un
enumdenominatoWeatherConditioncon le seguenti costanti, in questo ordine esatto:SUNNYCLOUDYRAINYSTORMYSNOWY
- Scrivere una funzione denominata
getWeatherAdviceche:- Accetti un parametro
enum WeatherConditiondenominatoweather - Non restituisca nulla (void)
- Utilizzi un’istruzione
switchper stampare consigli specifici in base alle condizioni meteorologiche:- Per
SUNNY: stampaPerfect day for outdoor activities! - Per
CLOUDY: stampaGood day for a walk, no sun protection needed. - Per
RAINY: stampaDon't forget your umbrella! - Per
STORMY: stampaStay indoors and avoid travel. - Per
SNOWY: stampaDrive carefully and dress warmly.
- Per
- Accetti un parametro
- Scrivere una funzione denominata
getActivitySuggestionche:- Accetti un parametro
enum WeatherConditiondenominatoweather - Non restituisca nulla (void)
- Utilizzi un’istruzione
switchper suggerire attività in base alle condizioni meteorologiche:- Per
SUNNY: stampaSuggested activity: Beach or hiking - Per
CLOUDY: stampaSuggested activity: Photography or gardening - Per
RAINY: stampaSuggested activity: Reading or indoor games - Per
STORMY: stampaSuggested activity: Movie marathon - Per
SNOWY: stampaSuggested activity: Skiing or hot cocoa
- Per
- Accetti un parametro
- Nella funzione main:
- Dichiarare una variabile di tipo
enum WeatherConditiondenominatacurrentWeather - Leggere dall’input un numero intero che rappresenta la condizione meteorologica (0, 1, 2, 3 o 4)
- Assegnare a
currentWeatheril valore enum corrispondente in base all’input - Stampare la condizione meteorologica corrente in questo formato esatto:
Current weather: [numeric_value] - Chiamare la funzione
getWeatherAdviceconcurrentWeather - Chiamare la funzione
getActivitySuggestionconcurrentWeather
- Dichiarare una variabile di tipo
Questa sfida dimostra la potenza della combinazione di enum e istruzioni switch per creare codice leggibile e facile da mantenere. Invece di usare casi numerici poco chiari nelle istruzioni switch, userai costanti enum significative che esprimono chiaramente la logica del programma. L’istruzione switch diventa autoesplicativa, rendendo facile capire cosa rappresenta ogni caso e modificare il comportamento secondo necessità.
Provalo tu
#include <stdio.h>
// TODO: Definisci qui l'enum WeatherCondition
// TODO: Implementa qui la funzione getWeatherAdvice
// TODO: Implementa qui la funzione getActivitySuggestion
int main() {
// Leggi l'input
int weatherInput;
scanf("%d", &weatherInput);
// TODO: Dichiara la variabile currentWeather e assegnale un valore dell'enum in base all'input
// TODO: Stampa la condizione meteorologica attuale nel formato "Current weather: [numeric_value]"
// TODO: Chiama la funzione getWeatherAdvice
// TODO: Chiama la funzione getActivitySuggestion
return 0;
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Fondamenti dei puntatori
Che cos’è un puntatore?Dichiarare i puntatoriL’operatore di indirizzo (&)L’operatore di dereferenziazione (*)Puntatori NULLRiepilogo: nozioni di base sui puntatori4Progetto: Utility di testo semplice
Panoramica del progettoConteggio dei caratteri7Strutture (struct)
Che cos'è una struct?Dichiarare una structCreare variabili structAccedere ai membri di una structInizializzare le structRiepilogo: struct dei dati dello studente10Enum e typedef
enum per costanti denominateDichiarare e usare gli enumEnum nelle istruzioni switchUsare typedef per gli alias di tipotypedef con le structRipasso: esercizi su typedef ed enum2Puntatori e array
I nomi degli array come puntatoriElementi degli array e puntatoriAritmetica dei puntatoriConfrontare i puntatoriRiepilogo: attraversamento di un array con i puntatori5Puntatori e funzioni
Passaggio per valorePassare puntatori alle funzioniModificare le variabili tramite puntatoriUn esempio classico: scambiare valoriPassare array alle funzioniRiepilogo: argomenti puntatore nelle funzioni3Array di caratteri e stringhe
Stringhe come array di charIl terminatore nullInput di stringhe con scanfUso di strlen()Uso di strcpy()Uso di strcat()Uso di strcmp()Riepilogo: funzioni di base per le stringhe6Gestione della memoria
Memoria Stack vs. HeapAllocazione dinamica - malloc()Usare sizeof() per l'allocazioneVerificare il fallimento dell'allocazioneLiberare la memoria con free()Allocare con calloc()Riepilogo: array dinamico9Progetto: Inserimento semplice di un contatto
Progetto: Definire una struct ContattoFunzione per creare un contattoEsercitati da solo: Compilatore C online