Istruzione Switch case linguaggio C
L'istruzione switch case del linguaggio C mi permette di creare una struttura di controllo con una sequenza di scelte successive.
switch(espressione)
{
case valore1:
// blocco 1
case valore2:
// blocco 2
...
default:
// blocco di default
}
Nella clausola switch indico tra parentesi tonde un'espressione logica-matematica oppure il nome della variabile da controllare.
In ogni case indico i possibili valori che l'espressione o la variabile potrebbe assumere, seguiti da un blocco di codice da eseguire in caso di esito positivo.
Come funziona
Il programma controlla se l'espressione/variabile ha il valore indicato in ogni case.
Dalla prima all'ultima.
Se l'espressione/variabile ha il valore di una case, il programma esegue il blocco di istruzioni corrispondente e quelle successive.
Dopo l'ultimo controllo il programma esegue il blocco di istruzioni di default.
Nota. Per interrompere il flusso dopo una case soddisfatta, devo aggiungere l'istruzione break alla fine di ogni blocco di codice. Ad esempio, se la variabile di controllo ha il valore 2, il primo programma esegue il codice 2, il codice 3 e il codice di default. Il secondo programma, invece, esegue il codice 2 e salta al di fuori della struttura di controllo.
Qual è il vantaggio della struttura switch case?
La struttura switch case equivale a una selezione multipla realizzata con gli if a cascata ma è più ordinata.
Attenzione al codice di default. Il codice di default viene sempre eseguito dal programma indipendentemente dall'esito delle case precedenti. L'unico modo per non eseguire il codice di default è aggiungere l'istruzione break al termine di ogni case oppure non inserire la clausola default nella struttura switch case. Si tratta, infatti, di una clausola opzionale. Può anche mancare.
Un esempio pratico
In questo programma chiedo all'utente di digitare il mese dell'anno in forma numerica da 1 a 12.
A seconda del numero digitato il programma stampa il nome del mese.
#include <stdio.h>
main()
{
int m;
printf("digita il mese (1-12):");
scanf("%d", &m);
switch (m)
{
case 1:
printf("gennaio");
break;
case 2:
printf("febbraio");
break;
case 3:
printf("marzo");
break;
case 4:
printf("aprile");
break;
case 5:
printf("maggio");
break;
case 6:
printf("giugno");
break;
case 7:
printf("luglio");
break;
case 8:
printf("agosto");
break;
case 9:
printf("settembre");
break;
case 10:
printf("ottobre");
break;
case 11:
printf("novembre");
break;
case 12:
printf("dicembre");
break;
default:
printf("hai digitato un numero errato");
}
}
Ad esempio, eseguo il programma e digito il numero intero 3.
Il programma controlla la prima case e la seconda case ma il valore non corrisponde.
Alla terza case il valore della case corrisponde a quello della variabile.
Quindi, il programma esegue il blocco di codice e stampa a video il messaggio "marzo".
digita il mese (1-12): 3
marzo
Poi l'istruzione break forza l'interruzione del controllo e il programma salta alla prima istruzione dopo la struttura switch case.
Esempio 2
In questo programma la switch case assegna alla variabile g il numero dei giorni del mese digitato:
#include <stdio.h>
int main()
{
int m, g;
printf("digita il mese (1-12):");
scanf("%d", &m);
switch (m) {
case 2:
g=28;
break;
case 4:
case 6:
case 9:
case 11:
g=30;
break;
default:
g=31;
}
printf("Il mese ha %d giorni", g);
}
Ad esempio, digito il numero intero 3.
Il programma esegue il codice di default e assegna alla variabile g il valore 31.
digita il mese (1-12): 3
Il mese ha 31 giorni
E così via.