这个SWITCH错误是什么意思?

时间:2012-03-11 09:54:45

标签: c switch-statement

我的CASE 5/6/7/8收到此错误。

在我开始向CASE 4添加附加函数调用之前,我确定这是显而易见的。

错误是什么意思?

错误:标识符范围内的案例标签,其中包含可变修改类型,不包含封闭的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;

3 个答案:

答案 0 :(得分:9)

student_record data_record[rec_cnt];

您无法在交换机中声明内容。

  • 在开关之前执行
  • 在一个区块中执行:

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

答案 1 :(得分:1)

在案例4中,您有一个数组声明:student_record data_record[rec_cnt];

创建一个额外的块:

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;

答案 2 :(得分:0)

在案例4中:您已声明了一个新变量,该变量在整个交换机的其余部分保持在范围内。这仅在C99和C ++中有效,但通常会产生警告(而不是错误)。解决方案是在case主体周围添加{...}以限制任何声明的变量的范围:

    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;

就个人而言,我习惯在所有开关/案例结构中使用此表单,因为它使维护更简单。