switch语句为什么是12

img


为什么是12呢 不应该是13呢,他是执行到第二个也就是case12才break的

i + 1 = 11, 匹配 case 11 ,因为 case 11 后面 没有 break; 那就继续执行 case 12 ,然后break 退出
这个过程中 i = 10, i 自增了 两次,最终 就是 i = 12

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇博客: 选择语句--选择一个正确的它中的 连续打印了多个case后的语句(break在switch中的作用) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    例如

    #include <stdio.h>
    int main()
    {
    	int day = 0;
    	scanf("%d", &day);
    	switch (day)
    	{
    	case 1:
    		printf("星期一\n");
    	case 2:
    		printf("星期二\n");
    	case 3:
    		printf("星期三\n");
    	case 4:
    		printf("星期四\n");
    	case 5:
    		printf("星期五\n");
    	case 6:
    		printf("星期六\n");
    	case 7:
    		printf("星期天\n");
    	}
    	return 0;
    }//当我们输入6的时候,打印了星期六和星期天
    

    这是由于,当我们执行第六条指令之后,没有阻止它停下来的话,它就会一直执行,直到把语句执行完,如果有default表达式,default后面的语句也会被执行

    #include <stdio.h>
    int main()
    {
    	int day = 0;
    	scanf("%d", &day);
    	switch (day)
    	{
    	case 1:
    		printf("星期一\n");
    		break;
    	case 2:
    		printf("星期二\n");
    		break;
    	case 3:
    		printf("星期三\n");
    		break;
    	case 4:
    		printf("星期四\n");
    		break;
    	case 5:
    		printf("星期五\n");
    		break;
    	case 6:
    		printf("星期六\n");
    		break;
    	case 7:
    		printf("星期天\n");
    		break;
    	}
    	return 0;
    }//当我们加上break之后,输入6之后,打印的结果为星期六,break阻止了程序的继续进行
    

    **注:**case:后面不一定都要加break,按需求加就行



    ### default在switch语句中的用法

    当我们输入的值,case语句总中没有,当我们又想给人们一个反馈的时候
    这个时候我们就可以使用default

    例如

    #define  _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    int main()
    {
    	int day = 0;
    	scanf("%d", &day);
    	switch (day)
    	{
    	case 1:
    	case 2:
    	case 3:
    	case 4:
    	case 5:
    		printf("工作日\n");
    		break;
    	case 6:
    	case 7:
    		printf("休息日\n");
    		break;
    	default:
    		printf("输入错误");
    		break;//当我们打印8,9,10时候,打印出来的结果就是输入错误
    	}
    	return 0;
    }
    

    **注:每个switch语句中只能出现一条default语句,但是它可以出现在语句列表(switch{}中)**中的任何位置

  • 以下回答来自chatgpt:

    问题回答:

    在switch语句中结果为12而不是13,尽管它执行了第二个case,即case12,并且中断了程序的原因是该case没有加上break语句,导致程序执行完case12后,继续往下执行,执行了下一个case,即default语句,输出了E。

    针对这个问题的解决方案是,在case12的末尾加上break语句,即可确保程序执行完case12后就跳出了switch语句,不会继续往下执行其他case。

    具体的代码如下所示:

    int main()
    {
        int i = 12;
        switch (i) {
            case 9:
                printf("A");
                break;
            case 12:
                printf("1");
                printf("2"); // 这里输出了1和2,但并没有退出switch语句
                break;
            case 13:
                printf("3");
                break; // 没有执行到这里
            default:
                printf("E");
                break;
        }
        return 0;
    }
    

    修正后的代码如下所示:

    int main()
    {
        int i = 12;
        switch (i) {
            case 9:
                printf("A");
                break;
            case 12:
                printf("1");
                printf("2"); // 这里输出了1和2,但并没有退出switch语句
                break;
            case 13:
                printf("3");
                break; // 执行到这里跳出switch语句
            default:
                printf("E");
                break;
        }
        return 0;
    }
    

    在case12的末尾加上了break语句,这样就能确保程序执行完case12后就跳出了switch语句,不会继续往下执行其他case。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^