*
* Ora vedremo un'istruzione usata per fare loop analogamente al for.
* Si tratta del while, che in inglese significa "quando":
*
* while(condizione) istruzione;
*
* Oppure si puo' usare un blocco di istruzioni anziche' una sola:
*
* while(condizione)
* {
* istruzioni;
* }
*
* Ossia: "Fin quando la condizione e' vera, riesegui l'istruzione".
* Facciamo un esempio pratico che stampa 9 volte un testo:
*
* pippo=0; * inizializzo pippo prima del while *
*
* while(pippo<10) * quando pippo<10 esegui il loop *
* {
* printf("Salve mondo");
* pippo++; * incremento pippo *
* }
*
* Naturalmente occorre inizializzare la variabile pippo prima di eseguire
* il while. Ma con il for non si faceva prima a fare la stessa cosa?
* Forse si, ed e' per questo che hanno inventato il for.
* Pero' il while puo' essere utile in altri casi.
* Da notare che sia il for che il while, se la condizione fosse subito
* falsa, non eseguono nemmeno una volta la/le istruzioni del loop.
* Intanto verifichiamo quello che abbiamo scritto, usandolo per il loop
* del programma sui canti della divina commedia. Mettiamo il programma
* nel loop di un while che ha come condizione "pippo diverso da zero", che
* si scrive (pippo!=0). Ricordiamoci di dare a pippo un valore diverso
* da zero prima del while, in modo da evitare di uscire senza eseguire
* nemmeno un loop.
*/
#include <stdio.h> /* Includiamo la libreria standard */
main() /* Funzione principale, eseguita per prima */
{ /* Inizio della funzione main() */
int pippo=1; /* Definiamo una variabile intera pippo che servira'
* per il loop while - definiamola gia' != 0 */
while(pippo!=0) /* Se pippo e' diverso (!=) da zero, cicla */
{
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");
printf(" 0) Esci\n\n");
scanf("%d",&pippo); /* Prendiamo pippo da tastiera */
switch(pippo) /* e usiamolo per il confronto */
{
case 1:
printf("\nNel 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("\nLo giorno se n'andava, e l'aer bruno\n");
printf("Toglieva gli animai, che sono in terra.\n");
break;
case 3:
printf("\nPer 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("\nRuppemi 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("\nCosi' 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("\nAl 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("\nPape 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("\nIo 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("\nQuel 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("\nOra 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;
case 0:
printf("\nUscita.\n");
default:
printf("\nSelezione sbagliata!\n");
} /* Fine del costrutto switch */
} /* Fine del loop while */
} /* Fine della funzione main() */
/* Come abbiamo visto per il for, si puo' fare un loop infinito con while
* sfruttando il fatto che se la condizione e' vera restituisce 1.
* Con un while(1) { ... } si eseguono le istruzioni all'infinito, a meno
* che non intervenga un break.
*/
