La strutura di selezione Switch
Il costrutto switch serve per effettuare decisioni multiple sulla base di una variabile.
Esso prevede varie etichette case più una opzionale default.
Facciamo subito un esempio: poniamo di voler contare i voti immessi secondo i parametri di giudizio da A (voto più alto) a F (voto più basso), permettendo di inserire i voti fino a che non viene premuto il carattere EOF (sotto windows si ottiene premendo CTRL+Z sotto UNIX CTRL+D).
//Uso dello switch
#include <iostream>
using namespace std;
int main()
{
int voto, //voto generico
aCount = 0, //occorrenze di a
bCount = 0, //occorrenze di b
cCount = 0, //occorrenze di c
dCount = 0, //occorrenze di d
eCount = 0, //occorrenze di e
fCount = 0; //occorrenze di f
cout << "Inserisci la lettera corrispondente al voto."
<< endl
<< "Premi CTRL+Z per smettere di immettere voti."
<< endl;
while (( voto = cin.get() ) != EOF )
{
switch (voto)
{
case 'A': //voto A maiuscola
case 'a': //voto a minuscola
++aCount; // incrementa le a
break; //esce dallo switch
case 'B': //voto B maiuscola
case 'b': //voto b minuscola
++bCount; // incrementa le b
break; //esce dallo switch
case 'C': //voto C maiuscola
case 'c': //voto c minuscola
++cCount; // incrementa le c
break; //esce dallo switch
case 'D': //voto D maiuscola
case 'd': //voto d minuscola
++dCount; // incrementa le d
break; //esce dallo switch
case 'E': //voto E maiuscola
case 'e': //voto e minuscola
++eCount; // incrementa le e
break; //esce dallo switch
case 'F': //voto F maiuscola
case 'f': //voto f minuscola
++fCount; // incrementa le f
break; //esce dallo switch
case '\n': //ignora nuova linea
case '\t': //ignora tabulazoni
case ' ': //ignora spazi vuoti
break; //esce dallo switch
default: //tutti gli altri caratteri
cout << "Voto non consentito."
<< "Immettere un nuovo voto." << endl;
break;
}
}
cout << endl << endl << "Occorrenze di tutti i voti:"
<< endl << "A: " << aCount
<< endl << "B: " << bCount
<< endl << "C: " << cCount
<< endl << "D: " << dCount
<< endl << "E: " << eCount
<< endl << "F: " << fCount << endl;
system("PAUSE");
return 0;
}
Lo switch quindi non fa altro che eseguire l'istruzione ++xCount dove x rappresenta il carattere digitato nel caso in cui esso sia ammissibile altrimenti come descritto nel caso di default viene richiesto di inserire un nuovo voto.
while (( voto = cin.get() ) != EOF )
questa istruzione sta a significare "ripeti tutto (cioè la struttura switch con i vari case) fino a che non viene immesso EOF".
Per il resto leggendo i commenti contenuti nel codice è facile capire come funziona il costrutto switch.
Nota: la funzione cin.get() non fa altro che leggere un singolo carattere da tastiera e porlo nella variabile voto.







