Abbiamo visto che, quando il computer puo scegliere tra piu di una istruzione da eseguire si usa il costrutto if-else, cioè se accade A allora esegui listruzione B, altrimenti esegui C.
Questo puo andar bene quando ci troviamo davanti a due o tre strutture iterative, ma cosa succede se dobbiamo operare con 5, 10 o 20 if-else differenti? Intendo, supponiamo di dover scrivere un programmino che riconosca quali tasti sono stati premuti dallutente, in particolare quale lettera. Le alternative sono 2. La prima è ovviamente quella che ha la seguente struttura:
#include <stdio.h> main() {
char x;
printf("digita una lettera : ");
scanf("%c", &x);
if(x=='a')
printf("hai premuto a");
else if (x=='b')
printf("hai premuto b");
else if (x=='c')
printf("hai premuto c");
else if (x=='d')
printf("hai premuto d");
else if (x=='e')
printf("hai premuto e");
else
printf("non riconosco la lettera");
/*...e cosi via fino alla zeta...*/
}
Tradotto in italiano sarebbe:
1. memorizza il carattere X
2. se è una A scrivi hai digitato la lettera A
3. altrimenti, se è una B scrivi hai digitato la lettera B
4. altrimenti, se è una C scrivi hai digitato la lettera C
5. ........cosi via
6. altrimenti (magari è un simbolo o un numero) scrivi non riconosco la lettera
NB allinterno del costrutto i char devono essere scritti all'interno di apici ( ) e non
di doppi apici ( ).
E fin qui nulla di cosi nuovo. Vediamo ora come si puo rendere piu elegante e un po meno complicata la struttura di questo listato mediante listruzione switch-case.
#include <stdio.h> main() {
char x;
printf("digita una lettera : ");
scanf("%c", &x);
switch(x) {
case 'a':
printf("hai premuto a");
break;
case'b':
printf("hai premuto b");
break;
case 'c':
printf("hai premuto c");
break;
case 'd':
printf("hai premuto d");
break;
case'e':
printf("hai premuto e");
break;
default:
printf("non riconosco la lettera");
break;
} /*fine dell'istruzione switch-case*/
}
Un consiglio: se non siete anglofili è buona norma imparare il significato italiano delle istruzioni (almeno delle keywords, le parole chiave) del C per divenire ancora piu abili. Switch in inglese significa interruttore, deviatoio, cambiamento, questi termini dovrebbero aiutarvi ad imprimere meglio nella vostra memoria listruzione ed il suo significato. Case significa caso, avvenimento.
Come avrete notato questa istruzione consente di implementare piu decisioni confrontando il risultato di unespressione (il cui valore é variabile) e un insieme di valori costanti.
Analisi del costrutto
Listruzione switch è seguita da unespressione racchiusa tra parentesi tonde, il cui risultato sarà di tipo char (nel caso di un carattere, come nellesempio) o di tipo int (nel caso di un numero intero). La parte restante del costrutto è formata da unistruzione composta da un qualsiasi numero di sottoistruzioni, ciascuna delle quali inizia con la keyword case: (due punti) seguita da unespressione costante. Cè poi break alla fine dellistruzione da eseguire. Esso che provoca luscita immediata dalla funzione di switch.
Se poi lespressione non corrisponde a nessuna delle costanti indicate, il controllo
del programma passa alle istruzioni che seguono la parola default. In questo caso, se viene premuta una lettera non implementata (ad es. G), verra eseguita listruzione di default printf("non riconosco la lettera").
Vediamo un altro esempio, questa volta al posto dei char abbiamo degli int.
#include <stdio.h> main() {
int x;
printf("digita una cifra : ");
scanf("%d", &x);
switch(x) {
case 1:
printf("il numero digitato é UNO");
break;
case 2:
printf("il numero digitato é DUE");
break;
case 3:
printf("il numero digitato é TRE");
break;
default:
printf("non ho parametri per valutare l'input");
} /*fine dell'istruzione switch-case*/
}
La struttura del non cambia, cambia solamente il fatto che i numeri del case non vanno scritti tra apici. Ovviamente cambia anche il tipo di dichiarazione della variabile x che questa volta non é char ma è int.
Tutto chiaro? Se avete dubbi potete scrivermi.

