鱼C论坛

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

for中的计数问题

[复制链接]
发表于 2013-9-16 11:13:38 | 显示全部楼层 |阅读模式
5鱼币
  1. main()
  2. {
  3.    int a;

  4.    for(a=0; a<=7; a++)
  5.    {
  6.       if( 5 == a )
  7.       {
  8.          break;
  9.       }
  10.    }
  11.    printf("a = %d", a);
  12. }
  13. O: a = 5


  14. main()
  15. {
  16.    int a;

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


最佳答案

查看完整内容

for(A;B;C)中遇见continue的话还是会先执行C再判断B进行下去 和while语句不一样。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-9-16 11:13:39 | 显示全部楼层
for(A;B;C)中遇见continue的话还是会先执行C再判断B进行下去
和while语句不一样。  
小甲鱼最新课程 -> https://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”
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

我知道continue是跳出本次循环,如果在continue加上a=5的话,输出5,那会成为死循环啊
小甲鱼最新课程 -> https://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吗?不会的,所以不会死循环 你可以试试
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

你没弄懂我的意思,既然continue会跳出循环,那a怎么自增?
按照这样说的话,应该会死循环,可是没有死循环,这是为什么
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

continue并没有退出(跳出)循环,而是本次循环中位于continue后的语句不执行,直接开始下一次的循环而已
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

直接开始下一个循环,a=5对吧,按照这个逻辑那不会一直死循环下去?
可是却没有,说明,a在什么时候自增了.
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

请问怎么验证呢?我觉得要实验才能更准确的证明呢,大神麻烦验证下,3q
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-9-16 15:37:50 | 显示全部楼层
你在一楼的例子不也是验证吗?我没有更好的例子,写了下面这个你看看
  1. #include <stdio.h>
  2. int main()
  3. {
  4.         int i,j,k;
  5.         j=k=0;
  6.         for(i=1;i<=2;i++,j++)
  7.         {
  8.                 if(i==2)
  9.                         continue;
  10.                 k++;
  11.         }
  12.         printf("FOR中CONTINUE:\nfor括弧内第三个语句执行了%d次,for循环内代码段完整执行了%d次,跳出循环后i=%d.\n",j,k,i);


  13.         j=k=0;
  14.         for(i=1;i<=2;i++,j++)
  15.         {
  16.                 if(i==2)
  17.                         break;
  18.                 k++;
  19.         }

  20.         printf("FOR中BREAK:\nfor括弧内第三个语句执行了%d次,for循环内代码段完整执行了%d次,跳出循环后i=%d.\n",j,k,i);
  21.        
  22.         getch();
  23.         return 0;
  24. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

这个只是区别continue和break的区别呢,并没有实质指出.
我做的实验只是指出有问题,并没指出哪执行a++了,或许只能反汇编去看了,谢谢了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

如果你仔细看,就知道我为什么要写那两个printf了,为什么要用j和k了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-9-16 15:59:40 | 显示全部楼层
若k++执行,则整个代码段完整执行,所以最后k表示是整个代码段完整执行的值
j表示第三句执行的次数,可以判断continue之后第三句执不执行
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

我明白的,不过那个还是指不出来在哪实现了a++
小甲鱼最新课程 -> https://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++
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

我也明白你写的程序的意思,可能我是想知道底层是怎么做的,
谢谢你了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-9-29 23:57:52 | 显示全部楼层
a=7了之后进行a++  所以a=8
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-16 19:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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