switch语句
int i=10;switch(i)
{case 9: i+=1;
case 10: i--;
case 11: i*=3;
case 12: ++i;
执行下面程序段后,i的值是多少? 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
} 巴巴鲁 发表于 2020-9-2 18:42
i=9之后,不是该执行case9吗? 雨天Zz 发表于 2020-9-2 21:12
i=9之后,不是该执行case9吗?
不是程序如果没有特殊情况都是从上往下运行的 遇到case语句,如果没有break,就运行到最后一个case,如果有default就运行到default,接着就退出switch
如果遇到break就会退出switch语句 雨天Zz 发表于 2020-9-2 21:12
i=9之后,不是该执行case9吗?
楼下正解 雨天Zz 发表于 2020-9-2 21:12
i=9之后,不是该执行case9吗?
2楼就是你要的最佳答案,理由:4楼已经解释很清楚了 本帖最后由 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
} 雨天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]