C - Problema con switch

Ayanokoji1
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.


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
Quinzio
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.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.