鱼C论坛

 找回密码
 立即注册
查看: 3458|回复: 16

for中的计数问题

[复制链接]
发表于 2013-9-16 11:13:38 | 显示全部楼层 |阅读模式
5鱼币
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怎么自增,在哪自增呢??
先感谢大家了.


最佳答案

查看完整内容

for(A;B;C)中遇见continue的话还是会先执行C再判断B进行下去 和while语句不一样。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-16 11:13:39 | 显示全部楼层
for(A;B;C)中遇见continue的话还是会先执行C再判断B进行下去
和while语句不一样。  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-16 12:09:48 | 显示全部楼层
continue并没有退出循环,而是本次循环中位于continue后的语句不执行,直接开始下一次的循环而已,所以a++是没错的。
你可以在
if( 5 == a )
      {
         continue;
      }
添加printf("会输出a==5这一句吗?a = %d", a);
看看会输出“a==5这一句吗?a = 5”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-9-16 12:17:52 | 显示全部楼层

我知道continue是跳出本次循环,如果在continue加上a=5的话,输出5,那会成为死循环啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-16 12:58:31 | 显示全部楼层
AleX_D 发表于 2013-9-16 12:17
我知道continue是跳出本次循环,如果在continue加上a=5的话,输出5,那会成为死循环啊

if( 5 == a )
{
         continue;
}
printf("会输出a==5这一句吗?a = %d", a); // 这样a会被赋值为5吗?不会的,所以不会死循环 你可以试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-9-16 13:20:13 | 显示全部楼层
苹果沃珂 发表于 2013-9-16 12:58
if( 5 == a )
{
         continue;

你没弄懂我的意思,既然continue会跳出循环,那a怎么自增?
按照这样说的话,应该会死循环,可是没有死循环,这是为什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-16 13:43:04 | 显示全部楼层
AleX_D 发表于 2013-9-16 13:20
你没弄懂我的意思,既然continue会跳出循环,那a怎么自增?
按照这样说的话,应该会死循环,可是没有死循 ...

continue并没有退出(跳出)循环,而是本次循环中位于continue后的语句不执行,直接开始下一次的循环而已
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-9-16 14:23:00 | 显示全部楼层
苹果沃珂 发表于 2013-9-16 13:43
continue并没有退出(跳出)循环,而是本次循环中位于continue后的语句不执行,直接开始下一次的循环而已

直接开始下一个循环,a=5对吧,按照这个逻辑那不会一直死循环下去?
可是却没有,说明,a在什么时候自增了.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-9-16 14:31:58 | 显示全部楼层
tsembrace 发表于 2013-9-16 14:29
for(A;B;C)中遇见continue的话还是会先执行C再判断B进行下去
和while语句不一样。

请问怎么验证呢?我觉得要实验才能更准确的证明呢,大神麻烦验证下,3q
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-9-16 15:55:21 | 显示全部楼层
本帖最后由 AleX_D 于 2013-9-16 15:58 编辑
tsembrace 发表于 2013-9-16 15:37
你在一楼的例子不也是验证吗?我没有更好的例子,写了下面这个你看看

这个只是区别continue和break的区别呢,并没有实质指出.
我做的实验只是指出有问题,并没指出哪执行a++了,或许只能反汇编去看了,谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-16 15:57:37 | 显示全部楼层
AleX_D 发表于 2013-9-16 15:55
这个只是区别continue和break的区别呢,并没有实质指出.

如果你仔细看,就知道我为什么要写那两个printf了,为什么要用j和k了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-16 15:59:40 | 显示全部楼层
若k++执行,则整个代码段完整执行,所以最后k表示是整个代码段完整执行的值
j表示第三句执行的次数,可以判断continue之后第三句执不执行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-9-16 16:01:01 | 显示全部楼层
tsembrace 发表于 2013-9-16 15:57
如果你仔细看,就知道我为什么要写那两个printf了,为什么要用j和k了

我明白的,不过那个还是指不出来在哪实现了a++
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-16 16:10:15 | 显示全部楼层
AleX_D 发表于 2013-9-16 16:01
我明白的,不过那个还是指不出来在哪实现了a++

。。。我也不知道要怎样你才觉得算“指出来”,就按你一楼例子,简化一下:
for(a=0;a<1;a++)
{
if(a==0)
continue;
}
printf("..)
如果没有执行第三句a++的话,就会无限循环;而实际a是1,说明执行了a++
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-9-16 16:13:33 | 显示全部楼层
tsembrace 发表于 2013-9-16 16:10
。。。我也不知道要怎样你才觉得算“指出来”,就按你一楼例子,简化一下:
for(a=0;a

我也明白你写的程序的意思,可能我是想知道底层是怎么做的,
谢谢你了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-29 23:57:52 | 显示全部楼层
a=7了之后进行a++  所以a=8
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 08:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表