Percorso: ilMac.net > Scuola di Mac > Corsi > Il linguaggio C


Il linguaggio C

L'istruzione switch-case

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 l’istruzione 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 dall’utente, 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 all’interno 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 l’istruzione 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 l’istruzione ed il suo significato. Case significa “caso”, “avvenimento”.

Come avrete notato questa istruzione consente di implementare piu’ decisioni confrontando il risultato di un’espressione (il cui valore é variabile) e un insieme di valori costanti.

Analisi del costrutto

L’istruzione switch è seguita da un’espressione racchiusa tra parentesi tonde, il cui risultato sarà di tipo char (nel caso di un carattere, come nell’esempio) o di tipo int (nel caso di un numero intero). La parte restante del costrutto è formata da un’istruzione composta da un qualsiasi numero di sottoistruzioni, ciascuna delle quali inizia con la keyword case: (due punti) seguita da un’espressione costante. C’è poi break alla fine dell’istruzione da eseguire. Esso che provoca l’uscita immediata dalla funzione di switch.
Se poi l’espressione 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 l’istruzione 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.



Data di pubblicazione: 07-05-2000
L'intero contenuto di questo sito dal 1998 del Team di ilMac.net, vietata ogni riproduzione senza il consenso scritto da parte degli autori.