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怎么自增,在哪自增呢??
先感谢大家了.
for(A;B;C)中遇见continue的话还是会先执行C再判断B进行下去
和while语句不一样。 continue并没有退出循环,而是本次循环中位于continue后的语句不执行,直接开始下一次的循环而已,所以a++是没错的。
你可以在
if( 5 == a )
{
continue;
}
添加printf("会输出a==5这一句吗?a = %d", a);
看看会输出“a==5这一句吗?a = 5” 苹果沃珂 发表于 2013-9-16 12:09 static/image/common/back.gif
continue并没有退出循环,而是本次循环中位于continue后的语句不执行,直接开始下一次的循环而已,所以a++是 ...
我知道continue是跳出本次循环,如果在continue加上a=5的话,输出5,那会成为死循环啊 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吗?不会的,所以不会死循环 你可以试试 苹果沃珂 发表于 2013-9-16 12:58 static/image/common/back.gif
if( 5 == a )
{
continue;
你没弄懂我的意思,既然continue会跳出循环,那a怎么自增?
按照这样说的话,应该会死循环,可是没有死循环,这是为什么 AleX_D 发表于 2013-9-16 13:20 static/image/common/back.gif
你没弄懂我的意思,既然continue会跳出循环,那a怎么自增?
按照这样说的话,应该会死循环,可是没有死循 ...
continue并没有退出(跳出)循环,而是本次循环中位于continue后的语句不执行,直接开始下一次的循环而已 苹果沃珂 发表于 2013-9-16 13:43 static/image/common/back.gif
continue并没有退出(跳出)循环,而是本次循环中位于continue后的语句不执行,直接开始下一次的循环而已
直接开始下一个循环,a=5对吧,按照这个逻辑那不会一直死循环下去?
可是却没有,说明,a在什么时候自增了. tsembrace 发表于 2013-9-16 14:29 static/image/common/back.gif
for(A;B;C)中遇见continue的话还是会先执行C再判断B进行下去
和while语句不一样。
请问怎么验证呢?我觉得要实验才能更准确的证明呢,大神麻烦验证下,3q 你在一楼的例子不也是验证吗?我没有更好的例子,写了下面这个你看看#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:58 编辑
tsembrace 发表于 2013-9-16 15:37 static/image/common/back.gif
你在一楼的例子不也是验证吗?我没有更好的例子,写了下面这个你看看
这个只是区别continue和break的区别呢,并没有实质指出.
我做的实验只是指出有问题,并没指出哪执行a++了,或许只能反汇编去看了,谢谢了 AleX_D 发表于 2013-9-16 15:55 static/image/common/back.gif
这个只是区别continue和break的区别呢,并没有实质指出.
如果你仔细看,就知道我为什么要写那两个printf了,为什么要用j和k了
若k++执行,则整个代码段完整执行,所以最后k表示是整个代码段完整执行的值
j表示第三句执行的次数,可以判断continue之后第三句执不执行 tsembrace 发表于 2013-9-16 15:57 static/image/common/back.gif
如果你仔细看,就知道我为什么要写那两个printf了,为什么要用j和k了
我明白的,不过那个还是指不出来在哪实现了a++ 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++ tsembrace 发表于 2013-9-16 16:10 static/image/common/back.gif
。。。我也不知道要怎样你才觉得算“指出来”,就按你一楼例子,简化一下:
for(a=0;a
我也明白你写的程序的意思,可能我是想知道底层是怎么做的,
谢谢你了 a=7了之后进行a++所以a=8
页:
[1]