是代码出问题了吗?标题凑字数

img


这个是代码的问题吗,为什么case1和case0能同时输出,不应该只能输出一个吗

因为最上面的switch的case 1 和case 0后面没有break,所以他们都可以执行;但是case 1 和case 0 里面的switch的case有break,所以在执行了匹配的case后会退出。

具体过程是:
首先,执行第一个switch 根据a的值1,执行case 1,然后这个case 1里面的swich 匹配b的值,b=2 ,匹配到这个swicth的 case 2 ,所以打印 “!”;

然后,因为第一个case 1后面没有break ,继续执行下面的case 0 ,这个case 0 里的switch匹配c的值,c=2, 匹配到这个switch的case 2,打印“$”,;

接着,上面这个case 0也没有break,继续执行 default, 打印“&”.

最后,第一个switch退出,打印最后的换行符。

#include <stdio.h>

int main(void){
    
    int a=1,b=2,c=2;
    
    switch(a){
        
        case 1:switch(b){
            case 1:printf("@");break;
            case 2:printf("!");break;
        }
        
        case 0:switch(c){
            case 0:printf("*");break;
            case 1:printf("#");break;
            case 2:printf("$");break; 
        }
        
        default:printf("&");
        
    }
    
    printf("\n");
    
    return 0;
} 

img