运行结果为什么是1而不是1-3

#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的区别,感觉楼上解释的很清楚了~