* * Abbiamo visto che sia i loop for che quelli while verificano la * condizione subito, per cui se fosse gia' falsa le istruzioni del ciclo * non sarebbero mai eseguite. Vediamo infatti questo esempio: * * pippo=20; * inizializzo pippo prima del while * * * while(pippo<10) * quando pippo<10 esegui il loop * * { * printf("Salve mondo"); * pippo++; * incremento pippo * * } * * Questo programma non fa niente, infatti il while vede che pippo non e' * minore di 10, e non esegue nemmeno una volta il corpo delle istruzioni. * Se invece si volesse fare in modo che le istruzioni fossero eseguite una * volta almeno, poi fosse controllata la condizione per un eventuale loop, * si dovrebbe usare il do, che in inglese significa "fai-esegui": * * do * { * istruzioni; * } * while (espressione); * * In questo caso eseguiamo le istruzioni, e DOPO controlliamo se e' vera * la condizione e di conseguenza ripetiamo l'esecuzione delle istruzioni * racchiuse tra { e }. Vediamo un loop do while in pratica: * * int pippo=1; * do * { * printf("Salve Mondo"); * pippo++; * } * while(pippo<10); * * Questo loop stampa 9 volte la scritta Salve Mondo. * Ordunque, possiamo usare il loop do-while nel nostro programma della * divina commedia, infatti il menu' deve essere eseguito almeno una volta, * quindi potremmo metterlo nel blocco di istruzioni del do, mettendo in * fondo il while con la condizione (pippo!=0). * Cio' tra l'altro ci fa evitare di dover dare a pippo un valore subito, * dato che il do-while verifica la condizione alla fine, dopo che e' * stato eseguito lo scanf che da a pippo il valore inserito da tastiera. */ #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 il loop do-while */ do /* Usiamo il loop do-while */ { 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 blocco do-while che viene rieseguito */ while(pippo!=0); /* Se pippo e' diverso (!=) da zero, cicla */ } /* Fine della funzione main() */ /* Come avrete notato, comunque, a parte il fatto che in certi casi il while * calza meglio del for, o il do-while meglio del while, in fondo si puo' * anche fare tutto con il solo while o con il solo for, magari dovendo * usare delle soluzioni poco eleganti in certi casi. Tenete quindi presente * questi 3 diversi costrutti, e adottate quello che risparmia piu' lavoro * o variabili nei vari casi. * */