2012-03-11 6 views
4

Je reçois cette erreur pour mon CASE 5/6/7/8.Que signifie cette erreur SWITCH?

Je suis sûr qu'il est quelque chose d'évident car il travaillait avant de commencer à ajouter des appels de fonctions d'addition à CASE 4.

Qu'est-ce que l'erreur?

erreur: étiquette de cas dans la portée de l'identificateur de type modifié ne contenant pas variablement enfermant instruction switch

switch(menu_selection()) 
    { 
     case 0 : i = find_empty_record(data_record);  //New record 
        if (i!=-99) 
        { 
         printf("\n\nRecord #%d found to be empty...\n\n",i); 
         data_entry(&data_record[i],i,&array_flag); 
        } 
     break; 

     case 1 :            //Edit 
       i=record_selection(array_flag); 
       data_entry(&data_record[i],i,&array_flag); 
     break; 

     case 2 : display_single(data_record,array_flag); //Display single record 

     break; 

     case 3 :           //Display all records 
       for (i=0;i<30;i++) 
        { 
         print_2_screen(&data_record[i],i,array_flag); 
        } 
     break; 

     case 4 : rec_cnt = get_text_file_size(import_file_name); //Import Text File 
        student_record data_record[rec_cnt]; 
        import_text_file(data_record,import_file_name,array_flag,rec_cnt); 
     break; 


     case 5 : // Import Binary File 
     break; 


     case 6 : 
       export_text(data_record,rec_cnt,array_flag);// Save to Text File 
     break; 

     case 7 : // Save to Binary File 
     break; 

     default : 
     break; 
    } 

} 
return 0; 
+1

À quelle ligne de votre code le message d'erreur fait-il référence? –

+0

Mettez le contenu de 'case 4' entre accolades. –

Répondre

8
student_record data_record[rec_cnt]; 

Vous ne pouvez pas déclarer des choses à l'intérieur d'un commutateur.

  • le faire avant le commutateur
  • Est-ce dans un bloc:

    case 4: 
    { 
        student_record data_record[rec_cnt]; 
        /* ... */ 
    } 
    
+0

Super, cela a corrigé les erreurs. Maintenant, il m'avertit à propos des variables inutilisées - étant le data_record à l'intérieur du bloc. J'essaie de créer dynamiquement un tableau struct à partir d'un fichier texte. Première tentative ... débutant. Des idées de meilleure méthode? –

+0

@ChefFlambe Qu'essayez-vous d'accomplir? Quel est l'avertissement? – cnicutar

+0

Fixe ... n'a eu que le déclarer dans un bloc. –

1

Dans le cas 4 vous avez une déclaration de tableau: student_record data_record[rec_cnt];

Créer un bloc supplémentaire:

case 4: 
    { 
    rec_cnt = get_text_file_size(import_file_name); //Import Text File 
    student_record data_record[rec_cnt]; 
    import_text_file(data_record,import_file_name,array_flag,rec_cnt); 
    } 
    break; 
0

Dans le cas 4: vous avez déclaré une nouvelle variable qui reste alors dans la portée tout au long du reste du commutateur. Ceci n'est valable que dans C99 et C++, mais générera généralement un avertissement (pas une erreur) même alors. La solution est d'ajouter {...} autour du corps de boîtier pour limiter la portée de toutes les variables déclarées:

case 4 : 
    { 
     rec_cnt = get_text_file_size(import_file_name); //Import Text File 
       student_record data_record[rec_cnt]; 
       import_text_file(data_record,import_file_name,array_flag,rec_cnt); 
    } 
    break; 

Personnellement, je l'habitude d'utiliser ce formulaire tout commutateur/cas construit car il rend la maintenance plus simple.