* * 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'. */