switch

作者: 箩篼 | 来源:发表于2018-08-31 14:16 被阅读0次

本章主要整理一下switch的易错点


明确概念

格式

 switch(表达式){
        case 常量表达式1:
            语句1;
            break;
        case 常量表达式2:
            语句2; 
            break;
        case 常量表达式n:
            语句n;
            break;
        default:
            语句n+1;
            break;
    }

分析语句

  • 表达式的值(注意是值,里面可以进行运算!):必须是整型变量或常量,或者可以被提升为整型的变量(如short、char)或常量(如a'')
  • 常量表达式:必须是常量,且必须是整型或者能够提升为整型的值,不能接收变量
  • default:可以省略,整个switch在遇到"}"结束

易错点

1、若要在case 分支里定义变量,必须加上一对{},否则该变量作用域不明确会报错,如:

  switch(1){
     case  1:
     int num = 666;
     printf("1\n");
     break;
     case  2:
     printf("2\n");
     break;
     case  3:
     printf("3\n");
     break;
    }

正确写法:

   switch(1){
     case  1:
    {
     int num = 666;
     printf("%i\n",num);
     break;
     }
     case  2:
     printf("2\n");
     break;
     case  3:
     printf("3\n");
     break;
    }

2、default可以写在任意位置,无论放在哪里都会等所有case分支不匹配再执行。但若不是写在最后,不能省略break;语句,否则会出现穿透现象,如:

switch(4){
     default:
       printf("default\n");
     case 1:
       printf("1\n");
       break;
     case 2:
       printf("2\n");
       break;
     case 3:
      printf("3\n");
      break;
//打印  default
//打印  1
}

将default调整到最后:

switch(4){
     case 1:
       printf("1\n");
       break;
     case 2:
       printf("2\n");
       break;
     case 3:
       printf("3\n");
       break;
    default:
      printf("default\n");
//打印default
    }

3、case 常量表达式的值不可以重复,如

switch(3){
   case  1:
      printf("1\n");
      break;
   case  2:
      printf("2\n");
      break;
   case  1:
      printf("3\n");
      break;
   default:
      printf("default\n");
      break;
  }

会报错!!!
注意点:常量表达式只需要值为常量即可,如2+1 例:

  switch(3){
     case  1:
        printf("1\n");
        break;
     case  2:
        printf("2\n");
        break;
     case  2+1:
        printf("3\n");
        break;
     default:
        printf("default\n");
        break;
    }

相关文章

网友评论

      本文标题:switch

      本文链接:https://www.haomeiwen.com/subject/beuswftx.html