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