AleX_D 发表于 2013-9-16 11:13:38

for中的计数问题

main()
{
   int a;

   for(a=0; a<=7; a++)
   {
      if( 5 == a )
      {
         break;
      }
   }
   printf("a = %d", a);
}
O: a = 5


main()
{
   int a;

   for(a=0; a<=7; a++)
   {
      if( 5 == a )
      {
         continue;
      }
   }
   printf("a = %d", a);
}
O: a = 8
这个两个实验作对比,不知道a++具体在什么地方,第二个实验continue跳出之后a怎么自增,在哪自增呢??
先感谢大家了.


tsembrace 发表于 2013-9-16 11:13:39

for(A;B;C)中遇见continue的话还是会先执行C再判断B进行下去
和while语句不一样。

苹果沃珂 发表于 2013-9-16 12:09:48

continue并没有退出循环,而是本次循环中位于continue后的语句不执行,直接开始下一次的循环而已,所以a++是没错的。
你可以在
if( 5 == a )
      {
         continue;
      }
添加printf("会输出a==5这一句吗?a = %d", a);
看看会输出“a==5这一句吗?a = 5”

AleX_D 发表于 2013-9-16 12:17:52

苹果沃珂 发表于 2013-9-16 12:09 static/image/common/back.gif
continue并没有退出循环,而是本次循环中位于continue后的语句不执行,直接开始下一次的循环而已,所以a++是 ...

我知道continue是跳出本次循环,如果在continue加上a=5的话,输出5,那会成为死循环啊

苹果沃珂 发表于 2013-9-16 12:58:31

AleX_D 发表于 2013-9-16 12:17 static/image/common/back.gif
我知道continue是跳出本次循环,如果在continue加上a=5的话,输出5,那会成为死循环啊

if( 5 == a )
{
         continue;
}
printf("会输出a==5这一句吗?a = %d", a); // 这样a会被赋值为5吗?不会的,所以不会死循环 你可以试试

AleX_D 发表于 2013-9-16 13:20:13

苹果沃珂 发表于 2013-9-16 12:58 static/image/common/back.gif
if( 5 == a )
{
         continue;


你没弄懂我的意思,既然continue会跳出循环,那a怎么自增?
按照这样说的话,应该会死循环,可是没有死循环,这是为什么

苹果沃珂 发表于 2013-9-16 13:43:04

AleX_D 发表于 2013-9-16 13:20 static/image/common/back.gif
你没弄懂我的意思,既然continue会跳出循环,那a怎么自增?
按照这样说的话,应该会死循环,可是没有死循 ...

continue并没有退出(跳出)循环,而是本次循环中位于continue后的语句不执行,直接开始下一次的循环而已

AleX_D 发表于 2013-9-16 14:23:00

苹果沃珂 发表于 2013-9-16 13:43 static/image/common/back.gif
continue并没有退出(跳出)循环,而是本次循环中位于continue后的语句不执行,直接开始下一次的循环而已

直接开始下一个循环,a=5对吧,按照这个逻辑那不会一直死循环下去?
可是却没有,说明,a在什么时候自增了.

AleX_D 发表于 2013-9-16 14:31:58

tsembrace 发表于 2013-9-16 14:29 static/image/common/back.gif
for(A;B;C)中遇见continue的话还是会先执行C再判断B进行下去
和while语句不一样。

请问怎么验证呢?我觉得要实验才能更准确的证明呢,大神麻烦验证下,3q

tsembrace 发表于 2013-9-16 15:37:50

你在一楼的例子不也是验证吗?我没有更好的例子,写了下面这个你看看#include <stdio.h>
int main()
{
        int i,j,k;
        j=k=0;
        for(i=1;i<=2;i++,j++)
        {
                if(i==2)
                        continue;
                k++;
        }
        printf("FOR中CONTINUE:\nfor括弧内第三个语句执行了%d次,for循环内代码段完整执行了%d次,跳出循环后i=%d.\n",j,k,i);


        j=k=0;
        for(i=1;i<=2;i++,j++)
        {
                if(i==2)
                        break;
                k++;
        }

        printf("FOR中BREAK:\nfor括弧内第三个语句执行了%d次,for循环内代码段完整执行了%d次,跳出循环后i=%d.\n",j,k,i);
       
        getch();
        return 0;
}

AleX_D 发表于 2013-9-16 15:55:21

本帖最后由 AleX_D 于 2013-9-16 15:58 编辑

tsembrace 发表于 2013-9-16 15:37 static/image/common/back.gif
你在一楼的例子不也是验证吗?我没有更好的例子,写了下面这个你看看
这个只是区别continue和break的区别呢,并没有实质指出.
我做的实验只是指出有问题,并没指出哪执行a++了,或许只能反汇编去看了,谢谢了

tsembrace 发表于 2013-9-16 15:57:37

AleX_D 发表于 2013-9-16 15:55 static/image/common/back.gif
这个只是区别continue和break的区别呢,并没有实质指出.

如果你仔细看,就知道我为什么要写那两个printf了,为什么要用j和k了

tsembrace 发表于 2013-9-16 15:59:40

若k++执行,则整个代码段完整执行,所以最后k表示是整个代码段完整执行的值
j表示第三句执行的次数,可以判断continue之后第三句执不执行

AleX_D 发表于 2013-9-16 16:01:01

tsembrace 发表于 2013-9-16 15:57 static/image/common/back.gif
如果你仔细看,就知道我为什么要写那两个printf了,为什么要用j和k了

我明白的,不过那个还是指不出来在哪实现了a++

tsembrace 发表于 2013-9-16 16:10:15

AleX_D 发表于 2013-9-16 16:01 static/image/common/back.gif
我明白的,不过那个还是指不出来在哪实现了a++

。。。我也不知道要怎样你才觉得算“指出来”,就按你一楼例子,简化一下:
for(a=0;a<1;a++)
{
if(a==0)
continue;
}
printf("..)
如果没有执行第三句a++的话,就会无限循环;而实际a是1,说明执行了a++

AleX_D 发表于 2013-9-16 16:13:33

tsembrace 发表于 2013-9-16 16:10 static/image/common/back.gif
。。。我也不知道要怎样你才觉得算“指出来”,就按你一楼例子,简化一下:
for(a=0;a

我也明白你写的程序的意思,可能我是想知道底层是怎么做的,
谢谢你了

trek600 发表于 2013-9-29 23:57:52

a=7了之后进行a++所以a=8
页: [1]
查看完整版本: for中的计数问题