想问关于switch语句的问题,问题在//后面。

#include<stdio.h>

int main()
{
    int grade;
    float score;
    printf("请输入成绩:");
    scanf("%f",&score);
    
    if(score>100||score<0)
    {
        printf("输入成绩错误"); 
    }
    else
    {
        grade=(int)score/10; 
    }    
    switch(grade)
    { 
        case 0:
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:printf("不及格");break;
        case 6:printf("及格");break;
        case 7:printf("中等"); break;
        case 8:printf("良好");break;
        case 9:
        case 10:printf("优秀");break;/*我了解到的switch语句的知识是执行对应case后面常量的部分,为什么case 9后面没输入命令但是会执行case10后面的语句呢*/
     } 
     return 0;
}


```

img

img

img

img


switch语句的步骤是:
1.计算表达式的值
2.找到与表达式值相同的case常量表达式,执行
case后边的语句序列,之后转去执行Switch的后续语句。
(也就是说只要,它会先找与它值对应的case语句,先执行自己对应的语句,像case1后面是空,所以它自己的,就会是空的,之后再继续执行后续的其他case对应的语句,如果遇到beak这种会跳出语句的,才不会执行语句)

总而言之,只要没有遇到break,就会继续执行其他后续语句;遇到break,就会跳出语句。

可以结合前面图片再理解下。

你在case9后面加个break就不会了,不加的话就是只要参数是9或10都可以执行case10后面的语句,而且你可以去试试,你前面的case0,case1,case2。。。等等也是执行的case5的语句

case语句在没有break时会继续执行下一个case,直到结束或则遇到break结束

你的case9没有break ,没有break就会按顺序结构依次往下执行

switch (grade)
case 1:
printf();
break;
.......
default:
break;