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.