Switch Case
Il salto condizionale a scelta multipla nel linguaggio C si realizza con l'istruzione SWITCH che consente di eseguire diversi blocchi di istruzione a seconda del valore di una variabile di controllo.
La sintassi dell'istruzione Switch Case
L'istruzione SWITCH è composta da una espressione di controllo e da diversi blocchi di istruzione CASE, ognuno dei quali è associato a un particolare valore dell'espressione di controllo iniziale.
switch ( espressione ) {
case costante1: istruzioni1;
case costante2: istruzioni2;
case costante3: istruzioni3;
....
default:istruzioni;
break;
}
L'ultimo blocco di istruzioni è detto DEFAULT e non è condizionato a nessun valore. Viene eseguito quando tutte le CASE precedenti sono false.
Un esempio pratico
Ad esempio, nel seguente codice sorgente si utilizza la tecnica condizionale della scelta multipla.
switch ( mese ) {
case (1): giorni=31;
break;
case(2):giorni=28;
break;
case(3):giorni=31;
break;
}
Ciascun blocco di istruzione CASE è seguito dall'istruzione BREAK che indica al programma di interrompere l'esecuzione della scelta multipla nel caso quando un singolo blocco case viene eseguito.
Ad esempio, se la variabile mese è uguale a due ( mese=2 ), il programma assegna il valore 28 alla variabile giorni ( giorni=28 ) senza procedere ulteriormente all'elaborazione del blocco case(3).
Sarebbe, infatti, inutile procedere con l'esecuzione degli altri blocchi case poiché, essendo associati a condizioni alternative, sarebbero tutti falsi.
Una volta assodato che la variabile mese è uguale a due, sappiamo che non può essere uguale a tre, e così via. È quindi inutile elaborare il resto delle istruzioni.
L'algoritmo della scelta multipla può essere rappresentato nel seguente modo:
L'attributo Default nell'istruzione Switch Case
L'istruzione SWITCH CASE può essere ottimizzata quando più valori sono associati a uno stesso blocco di istruzioni.
Ad esempio, sappiamo che aprile, giugno, settembre e novembre hanno trenta giorni.
Possiamo riscrivere l'esempio precedente nel seguente modo:
switch ( mese ) {
case (4):
case (6):
case (9):
case (11):
giorni=30;
break;
case(2):giorni=28;
break;
default:
giorni:31;
}
Se la variabile mese è uguale a 4, 6, 9 o 11, il programma esegue il primo blocco di istruzioni CASE e assegna il valore trenta alla variabile giorni ( giorni=30 ).
In caso contrario, il programma procede a elaborare la seconda CASE dove verifica se la variabile mese è uguale a 2. Se è vero, assegna il valore ventotto alla variabile giorni ( giorni=28 ).
Se anche quest'ultima condizione è falsa, il programma esegue l'ultimo blocco di DEFAULT, in cui si assegna alla variabile giorni il valore trentuno ( giorni=31 ).
Abbiamo così scritto in linguaggio C l'equivalente del proverbio "trenta dì porta novembre, con aprile, giugno e settembre. Di ventotto ce n'è uno (febbraio). Tutti gli altri ne han trentuno".