*
* Ora analizzeremo il costrutto switch, che permette di fare facilmente
* test multipli ad una variabile. Abbiamo visto come fare dei test
* multipli tramite molti if annidati, ma quando i test sono molti, ossia
* sono molti i "casi" in cui agiamo diversamente, e' meglio usare switch.
* Ecco la sua forma:
*
* switch(variabile)
* {
* case costante1:
* istruzione1;
* break;
* case costante2:
* istruzione2;
* break;
* case costante3:
* istruzione3;
* break;
* default:
* istruzione4;
* }
*
* In questo caso faremmo 3 confronti. Se la variabile non soddisfa nessuno
* dei 3 confronti viene eseguita l'istruzione sotto "default".
* I break servono per fermare il confronto qualora uno dei casi fosse
* risultato vero. Se non si mettono i break i confronti continuano al case
* successivo. Se non si mette la parte default, nel caso in cui nessun
* confronto sia vero, non viene fatto niente.
* Vediamo un'esempio pratico:
*
* switch(pippo);
* {
* case 1:
* printf("Pippo vale 1");
* break;
* case 2:
* printf("Pippo vale 2");
* break;
* case 3:
* printf("Pippo vale 3");
* break;
* default:
* printf("Pippo non mi interessa");
* }
*
* Da notare che lo switch puo' verificare solo l'uguaglianza, a differenza
* degli if che possono verificare condizioni qualsiasi.
* Potremmo usare lo switch per fare una specie di menu' di selezione,
* in cui controlliamo quale voce di menu' (corrispondente ad un numero),
* e' stata selezionata.
*/
#include <stdio.h> /* Includiamo la libreria standard */
main() /* Funzione principale, eseguita per prima */
{ /* Inizio della funzione main() */
int pippo; /* Definiamo una variabile intera pippo che servira'
* per lo switch */
printf("\n Scegli il canto dell'inferno che ti interessa:\n\n");
printf(" 1) Canto primo. \n");
printf(" 2) Canto secondo. \n");
printf(" 3) Canto terzo. \n");
printf(" 4) Canto quarto. \n");
printf(" 5) Canto quinto. \n");
printf(" 6) Canto sesto. \n");
printf(" 7) Canto settimo. \n");
printf(" 8) Canto ottavo. \n");
printf(" 9) Canto nono. \n");
printf(" 10) Canto decimo. \n");
scanf("%d",&pippo); /* Prendiamo pippo da tastiera */
switch(pippo) /* e usiamolo per il confronto */
{
case 1:
printf("Nel mezzo del cammin di nostra vita\n");
printf("Mi ritrovai per una selva oscura,\n");
printf("Che la diritta via era smarrita.\n");
break;
case 2:
printf("Lo giorno se n'andava, e l'aer bruno\n");
printf("Toglieva gli animai, che sono in terra.\n");
break;
case 3:
printf("Per me si va nella citta' dolente,\n");
printf("Per me si va nell'eterno dolore,\n");
printf("Per me si va tra la perduta gente.\n");
break;
case 4:
printf("Ruppemi l'alto sonno nella testa\n");
printf("Un greve tuono, si ch'io mi riscossi,\n");
printf("Come persona che per forza e' desta\n");
break;
case 5:
printf("Cosi' discesi del cerchio primaio\n");
printf("Giu' nel secondo, che men loco cinghia,\n");
printf("E tanto piu' dolor, che pugne a guaio.\n");
break;
case 6:
printf("Al tornar della mente, che si chiuse\n");
printf("Dinnanzi alla pieta' de' due cognati\n");
printf("Che di tristizia tutto mi confuse,\n");
printf("Nuovi tormenti e nuovi tormentati\n");
printf("Mi veggo intorno, come c'io mi muova\n");
break;
case 7:
printf("Pape Satan, pape Satan aleppe,\n");
printf("Comincio' Pluto colla voce chioccia\n");
printf("E quel Savio gentil, che tutto seppe\n");
printf("Disse per confortarmi: Non ti noccia\n");
printf("La tua paura, che', poter ch'egli abbia,\n");
printf("Non ti torra' lo scender questa roccia.\n");
break;
case 8:
printf("Io dico seguitando, ch'assai prima\n");
printf("Che noi fossimo al pie' dell'alta torre,\n");
printf("Gli occhi nostri n'andar suso alla cima\n");
break;
case 9:
printf("Quel color che vilta' di fuor mi pinse\n");
printf("Veggendo il Duca mio tornare in volta\n");
printf("Piu' tosto dentro il suo nuovo ristrinse\n");
break;
case 10:
printf("Ora sen va per uno stretto calle\n");
printf("Tra il muro della terra e li martiri\n");
printf("Lo mio Maestro, ed io dopo le spalle.\n");
break;
default:
printf("Selezione sbagliata!\n");
}
} /* Fine della funzione main() */
/* L'unico "difetto" che ha questo programma e' che se si volessero vedere
* tutti e 10 gli inizi di canto si dovrebbe eseguire 10 volte.
* In pratica, bisognerebbe fare in modo che si ritorni al menu' di
* selezione ogni volta fino a che non si voglia uscire dal programma,
* magari inserendo 0. Vedremo dei sistemi per fare cio'.
*/
