*
 * Il nostro intento sara' quello di rendere il programma piu' comodo
 * ripetendo la possibilita' di scegliere un canto fino a che non si sceglie
 * di uscire dal programma, ad esempio con la selezione 0.
 * Per fare questo ci sono molti sistemi. Avendo gia' trattato del for,
 * useremo questa istruzione per ripetere l'esecuzione dell'intero
 * programma fino a che pippo non varra' 0. Comunque, dato che abbiamo
 * introdotto anche l'istruzione break (che significa "interrompi"), si
 * puo' fare un loop for infinito, interrotto tramite l'istruzione break
 * quando pippo vale 0. Andiamo avanti per gradi, vedendo intanto come
 * si fa a fare un loop for INFINITO:
 *
 *	for(;;) printf("Stampa questo all'infinito\n");
 *
 * Abbiamo lasciato vuota la parte relativa alla condizione di uscita, per
 * cui la condizione e' sempre vera e il for ripete all'infitito l'istruzione
 * printf. Per terminare il loop si potrebbe spegnere il computer, oppure
 * si puo' fermare con un'istruzione break. Ipotiziamo questo caso:
 *
 *	for(;;)
 *	{
 *	  istruzioni;
 *	}
 *
 * In questo caso ripetiamo un blocco di istruzioni all'infinito. Se pero'
 * nel blocco di istruzioni mettessimo questo:
 *
 *	for(;;)
 *	{
 *        scanf("%d",&pippo);
 *        if (pippo==0) break;       * se pippo=0, usciamo dal loop for *
 *      }
 *
 * Lo scanf e l'if saranno rieseguiti fino a che non sara' immesso il
 * valore 0, infatti se pippo=0, viene eseguito il break, che fa uscire
 * istantaneamente da esecuzioni cicliche come il for, il while ecc.
 * Da notare che per ottenere il nostro scopo avremmo anche potuto mettere
 * la condizione pippo==0 nel for, ma in questo modo abbiamo visto come
 * fare loop infiniti, o meglio interrotti solo dall'istruzione break.
 * Ora pero' dovremo includere il blocco dello switch dentro quello del for:
 *
 *	for(;;)
 *	{
 *        scanf("%d",&pippo);
 *	  switch(pippo)			  * usiamo pippo per il confronto *
 *	  {
 *	     case 1:
 *	        printf("\nNel mezzo del cammin di nostra vita\n");
 *	        break;
 *	     case 2:
 *	        printf("\nLo giorno se n'andava, e l'aer bruno\n");
 *              eccetera...
 *        }
 *        if (pippo==0) break;       * se pippo=0, usciamo dal loop for *
 *      }
 *
 * Come si vede le cose si complicano, ma basta seguire l'ordine delle
 * aperture e delle chiusure delle parentesi graffe, che indicano le
 * gerarchie dei blocchi di programma. Non a caso ogni volta che si apre
 * un blocco e' uso spostarsi a scrivere le istruzioni piu' avanti, in modo
 * da rendere piu' chiaro il listato.
 */

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

    for(;;)	/* Loop tericamente infinito, interrotto pero' dal break */
    {
	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 */
      if (pippo==0) break; /* se pippo=0, usciamo dal loop for */
    }                    /* Fine del loop for */
} 		       /* Fine della funzione main() */

/* Questo e' il nostro primo programma con la struttura classica a menu',
 * che permette di usare le sue funzioni fino a che non si voglia uscire.
 */