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