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