C - Problema con switch
Salve a tutti,
di nuovo mi trovo a dover gestire una situazione che non comprendo, di seguito il codice del main di un programma che sto' a gestire.
Nelle mie intenzioni, una volta uscito dallo ciclo while che si attiva nel case 1: (cpuloop) dovrei tornare al ciclo while del main (mainloop)
Il problema e' che in discesa funziona, ma in risalita no. Quando faccio la scelta 0 del secondo case, anziche' tornare al primo while mi esce da entrambi.
Immagino che sia perche' break; rompe tutti i cicli attivi?
Grazie per l'attenzione ed eventuali aiuti.
di nuovo mi trovo a dover gestire una situazione che non comprendo, di seguito il codice del main di un programma che sto' a gestire.
main () { int mainpick; int cpupick; int mainloop = 0; int cpuloop = 0; while (mainloop == 0) { system ("cls"); printf ("Gestore Assemblaggio PC 0.1\n"); printf ("by Salvatore Casella\n\n"); printf ("1 - Gestione CPU\n"); printf ("0 - Uscita\n"); printf ("\nSelezionare un opzione: "); scanf ("%d", &mainpick); switch (mainpick) { case 1: while (cpuloop == 0 ) { system ("cls"); printf ("Gestore CPU\n\n"); printf ("1 - Lista CPU\n"); printf ("2 - Inserire nuova CPU\n"); printf ("3 - Eliminare una CPU dalla Lista\n"); printf ("4 - Modificare i dati di una CPU\n"); printf ("5 - Formattare il file di salvataggio\n"); printf ("0 - Tornare al menu' precedente\n"); printf ("\nSelezionare un opzione: "); scanf ("%d", &cpupick); switch (cpupick) { case 1: listcpu (cpulist); break; case 2: insertcpu (cpulist); break; case 3: deletecpu (cpulist); break; case 4: modcpu (cpulist); break; case 5: system ("cls"); pf = fopen("cpusave.bin", "wb"); fclose(pf); system ("pause"); break; case 0: cpuloop = 1; break; //Termine switch cpupick } //Termine while cpuloop } case 0: mainloop = 1; break; //Termine switch mainpick } //Termine Mainloop } system ("pause"); // Termine main }
Nelle mie intenzioni, una volta uscito dallo ciclo while che si attiva nel case 1: (cpuloop) dovrei tornare al ciclo while del main (mainloop)
Il problema e' che in discesa funziona, ma in risalita no. Quando faccio la scelta 0 del secondo case, anziche' tornare al primo while mi esce da entrambi.
Immagino che sia perche' break; rompe tutti i cicli attivi?
Grazie per l'attenzione ed eventuali aiuti.
Risposte
Devi inserire il break anche alla fine del case 1 di mainpick, altrimenti ti esegue anche il case 0.
Poi bisogna che da qualche parte metti a 0 cpupick, prima di rientrare nel suo loop.
Poi bisogna che da qualche parte metti a 0 cpupick, prima di rientrare nel suo loop.