swtich循环为什么这样输出

为什么输出是这样的,而且i的值不是1吗?为什么第一行case1、2、3都能打印出来

另外就是最开始i不是等于0?switch循环一遍后才++不是?为什么第一行i直接就1了

 

因为每个case分支后没break,会执行匹配成功后面所有分支

while(i++) 该语句运行完 i=1 

case里少了break,这段代码修改如下,供参考:

int i=0;
while(i<3){
      switch(i){
            case 0:printf("fat %d\n",i);break;
            case 1:printf("hat %d\n",i);break;
            case 2:printf("cat %d\n",i);break;
            default:printf("Oh no!\n"); break;
      }
      putchar('\n');
      i++;
}