退出switch不是遇见break或者执行完吗?下面什么情况求解答,求解答

img


为啥运行出来是两个六,不应该是4个吗?

img


我将default放在上面运行结果也是两个六,和上方一致(这样遇见default就退出switch就说不通了),到底为啥?

你是代码没保存吧, 不跳出继续执行是遇到你对应的case之后,如果没有break那么就会继续执行之后的case,而遇到匹配项之前的case是不执行的,可以参考下边的看看

img

    switch (2) {
    case 1:
        System.out.println("111"); 
    case 2:
        System.out.println("222"); 
    case 3:
        System.out.println("333");
    default:
            System.out.println("555"); 
    case 4:
        System.out.println("444");
         
    }

输出
222
333
555
444

default要写在后面,否则不会进入下面的标号

  • 这篇博客: switch语句中的 四、用好break语句 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •   break在switch语句中,是人为添加的,而不是默认的,对每个case分支都是可选的,也就是说,有些可以有,有些可以没有。因为有了这样的特性,编程变得更灵活。

    例1:当不使用break时,当输入3之后,却执行了case3以及以后的所有语句,输出了Wednesday 及以后的所有单词。

    #include <stdio.h>
    int main(void){
        int i;
        printf("input integer number: ");
        scanf("%d",&i);
        switch (i){
            case 1:printf("Monday\n");
            case 2:printf("Tuesday\n");
            case 3:printf("Wednesday\n");
            case 4:printf("Thursday\n");
            case 5:printf("Friday\n");
            case 6:printf("Saturday\n");
            case 7:printf("Sunday\n");
            default:printf("Error\n");
        }
        return 0;
    }
    

      这恰恰反应了switch语句的一个特点,在switch语句中,“case 常量表达式”只相当于一个语句标号, 表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语句,所以出现了继续执行所有后面case语句的情况。

    例2:当使用break语句时,这样使得每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。

    #include <stdio.h>
    int main(void){
        int i;
        printf("input integer number:    ");
        scanf("%d",&i);
        switch (i){
            case 1:printf("Monday\n");  	break;
            case 2:printf("Tuesday\n");   	break;
            case 3:printf("Wednesday\n");  	break;
            case 4:printf("Thursday\n");  	break;
            case 5:printf("Friday\n");  	break;
            case 6:printf("Saturday\n");  	break;
            case 7:printf("Sunday\n");  	break;
            default:printf("Error\n");
        }
        return 0;
    }
    
  • 以下回答由chatgpt基于相关博客总结生成:

    根据代码和资料分析,switch语句中缺少break语句,导致执行完某条case分支后继续执行后面的case分支。应该在每个case分支的最后添加break语句,以避免出现这种情况。例如:

    switch (i){
        case 1:printf("Monday\n");      break;
        case 2:printf("Tuesday\n");     break;
        case 3:printf("Wednesday\n");   break;
        case 4:printf("Thursday\n");    break;
        case 5:printf("Friday\n");      break;
        case 6:printf("Saturday\n");    break;
        case 7:printf("Sunday\n");      break;
        default:printf("Error\n");
    }
    

    另外,如果有多个case分支需要执行相同的操作,此时可以连续列出这些分支,在最后一个分支添加break语句即可。例如:

    switch (day)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("weekday\n");
        break;
    case 6:
    case 7:
        printf("weekend\n");
        break;
    }