雨天Zz 发表于 2020-9-2 17:59:43

switch语句

int i=10;
switch(i)
{case 9: i+=1;
case 10: i--;
case 11: i*=3;
case 12: ++i;
执行下面程序段后,i的值是多少?

巴巴鲁 发表于 2020-9-2 18:42:45

         int i=10;
                switch(i)
                {
                case 9: i+=1;
                case 10: i--; // 初始i为10, 执行i--,i = 9
                case 11: i*=3; // 继续执行,i = i * 3 = 27
                case 12: ++i; // 继续执行, ++i, i = 28
                }

雨天Zz 发表于 2020-9-2 21:12:34

巴巴鲁 发表于 2020-9-2 18:42


i=9之后,不是该执行case9吗?

baige 发表于 2020-9-2 21:32:17

雨天Zz 发表于 2020-9-2 21:12
i=9之后,不是该执行case9吗?

不是程序如果没有特殊情况都是从上往下运行的

baige 发表于 2020-9-2 21:33:32

遇到case语句,如果没有break,就运行到最后一个case,如果有default就运行到default,接着就退出switch
如果遇到break就会退出switch语句

巴巴鲁 发表于 2020-9-2 21:43:51

雨天Zz 发表于 2020-9-2 21:12
i=9之后,不是该执行case9吗?

楼下正解

风过无痕1989 发表于 2020-9-3 10:23:27

雨天Zz 发表于 2020-9-2 21:12
i=9之后,不是该执行case9吗?

2楼就是你要的最佳答案,理由:4楼已经解释很清楚了

LuLD 发表于 2020-9-4 10:44:48

本帖最后由 LuLD 于 2020-9-4 10:52 编辑

雨天Zz 发表于 2020-9-2 21:12
i=9之后,不是该执行case9吗?

         int i=10;
                switch(i)      // i 只会在这里判断一次,而后跳到指定的段,之后不管 i 的值符合case 那个值,都不会再跳转,只会从上而下依次执行
                {   
                  .....
                  case 9: i += 1;// 就算 把 case 9 放在 case 10 的之后的某段中,也不会进行跳转的,不同于 goto
                }

风过无痕1989 发表于 2020-9-4 11:28:15

雨天Zz 发表于 2020-9-2 21:12
i=9之后,不是该执行case9吗?

你的程序没有 break 语句,执行完 case 10 后,本次循环没有被中止,程序就往下执行,即执行 case 11、csae12,然后再返回 switch 语句,进行判断,此时的 i 已经为 28了,不满足任何 case 情况,程序就此中止。若要程序能够执行 case 9 ,程序需做如下修改:


int i=10;
switch(i)
{case 9: i+=1;break;
case 10: i--;break;
case 11: i*=3;break;
case 12: ++i;break;


这样程序执行完 case 10 后,i = 9,由于有 break 语句,程序中断本次循环,不再往下执行,便返回 switch 语句进行判断,此时的 i = 9 ,符合 case 9 的条件,执行 case 9 语句,使得 i 再次等于 10,你的程序便进入了死循环了。
页: [1]
查看完整版本: switch语句