#include
int main()
{ int i=5;
do
{ switch(i%2)
{ case 0:i--;break;
case 1:i--;continue; }
i--;i--;
printf("%d,i"); }while(i>0);
return 0; }
这个应该是 continue 的用法吧
continue 中断的是 while 的执行,不是 switch 的执行。
所以第一次 switch 后的两个连续 i-- 是不会被执行的,只执行了 case 中的一个 i--;接着又执行了 switch 语句,然后执行了 case 中的一次 i--;break 后再连续执行了两次 i--.
所以结果出来了,是 1.
printf("%d,i"),应该是printf("%d",i)吧
楼主的结果输出为 0,i
呵呵
这么简单的问题,break和continue的区别,continue是结束本次循环,继续下一次循环;break是跳出循环,也就是说循环终止了。
首先你的括号就没有匹配全
其次 两个i--完全可以写成i-=2;
流程如下
i=5 i%2=1 case1 i-- i=4;
i=4 i%2=0 case0 i-- i=3;
i=3 i%2=1 case1 i-- i=2;
i=2 i%2=0 case0 i-- i=1;
i=1 i%2=1 case1 i-- i=0;
i=0 i%2=0 case0 i-- i=-1;
i=-1 i%2=-1 case无 跳出
i--,i--;
i=-3
但由于你用的switch
所以
i=5 i%2=1 case1 i-- i=4;
i=4 i%2=0 case0 i-- i=3 break;
i--,i--
i=1;
注释是针对随后的语句。
//经过后,i==5
int i = 5;
do
{
//第一次循环经过:i==5;(5%2=1);转case 1处;
//第二次循环经过:i==4,转;case 0 处;
//第三次循环经过:i==1;转 case 1处;
//第四次循环经过:i==0;转 case 0处;
switch (i % 2)
{
//第二次循环经过:i=4 ==> i=3;转switch后
//第四次循环经过:i==0 ==> i==-1;,转switch后
case 0: i--; break;
//第一次循环经过:i==4 ==> i==4;启动第二次循环;
//第三次循环:i==1 ==> i==0;启动第四次循环;
case 1: i--; continue;
}
//第二次循环经过:i==3 ==> i==1;
//第四次循环经过:i==-1 ==> i==-3;
i--; i--;
//第二次循环经过:打印1
//第四次循环经过:打印-3
printf("%d,i");
}
//第二次循环经过,i==1;启动第三次循环
//第四次循环经过,i==-3;退出循环
while (i > 0);
经过我单步调试,确定了91program的说法是正确的,continue是直接执行的while的下一次循环,而不是switch,结果是1.
楼上有人提到了,switch里的break和continue地位是不对等的,前者针对switch,后者针对外层的loop
你的“printf("%d,i")”是在最后的,所以值输出最后i=1的值,你如果把printf放在switch里面就可以了。
关键字continue和break的区别,感觉楼上解释的很清楚了~