06: Switch, Case, Default

Nella guida precedente abbiamo visto l’istruzione condizionale if-else, che serve principalmente per scegliere un’istruzione in alternativa a un’altra a seconda di una certa condizione. Se, invece, le possibili alternative sono numerose, una soluzione con l’if-else risulta piuttosto complicata e scomoda (si può fare, per carità, ma perché complicarsi la vita?! ). Il C offre una struttura di controllo più maneggevole che consente di elencare una vasta varietà di scelte: lo switch.
Dal punto di vista sintattico il costrutto switch è:

switch (ValoreLetto)
 {
 case '1': istruzione; break;
 case '2': case '3': istruzione; break; //per indicarle di seguito
 //tutte le case che volete
 }

Ovvero, costa di:

  • Parola chiave switch
  • Espressione all’interno delle parentesi tonde ( )
  • Le varie case all’interno delle parentesi graffe { }, costituite a loro volta da

    • la parola chiave case
    • un’espressione costante (nel nostro caso ‘1’, ‘2’, ‘3’: le virgolette sono state messe solo per farvi capire che potete mettere tutti i valori che volete, purché di tipo integer o char)
    • il :
    • l’istruzione (o le istruzioni) da eseguire, ognuna seguita dal ;
    • l’istruizione di break con il terminatore ;

Cosa significa questo costrutto? Il programma rileva l’espressione nelle parentesi, che deve essere di tipo integer o char. Se il valore corrisponde a una delle espressioni delle varie clausole case, il programma eseguirà le istruzioni specificate dopo la costante. Onde evitare che venga eseguita tutta la serie di case dello switch (“esecuzione a cascata”), si inserisce l’istruzione break che  “salta” tutte le altre case seguenti, presenti nelle parentesi graffe, e fa eseguire l’istruzione immediatamente successiva allo switch.
N.B. I valori delle espressioni delle clausole devono essere tutti diversi tra loro, onde evitare ambiguità.

Esempio:


#include<stdio.h>
int x;
int main()
{
printf("Premi un numero: \n Premi 1 per Arrabbiarti \n Premi 2 per Lanciare uno sguardo di disprezzo \n Premi 3 per Mostrare il dito medio \n");
scanf("%d", &x);
switch(x)
{
case 1: printf ("\n Sei arrabbiato! Prendi una camomilla"); break;
case 2: printf ("\n Stai lanciando uno sguardo di profondo disprezzo! Severus Piton approva.."); break;
case 3: printf ("\n Hai alzato il dito medio! Assaggerai la mia ira"); break;
default: printf ("\n Non è difficile premere o 1 o 2 o 3!");
}
} 

Cattura<Risultato a video nel caso in cui prema 3>

Al posto dell’istruzione case, possiamo trovare l’istruzione default, composta dalla parola chiave default seguita dal : , dalle varie istruzioni e dal ; (nessuna costante quindi dopo la parola default, al contrario del case).
Questa istruzione, se presente all’interno delle parentesi { } dello switch, verrà eseguita solo nel caso in cui il valore letto nelle ( ) (nel nostro caso x) non corrisponde a nessuna costante delle clausole di case (quindi, nell’esempio, se x non è né 1, né 2, né 3). Se la default non è presente, e i valori non corrispondono a nessun case, il programma esegue direttamente l’istruzione successiva alla switch.

Spero di essere stata chiara nella spiegazione, come al solito se avete domande, non siate timidi. Nelle prossime guide spiegheremo cosa sono i cicli e a cosa servono. Non perdetele!

Please follow and like us: