continue语句在while和for中用法的差别

在C语言中continue语句用于在循环体中结束当前循环,直接进行下一次循环。

比如while循环体一般是这样:

1
2
3
4
5
6
while(i<10)
{
...
...
++i;
}

当我们要写continue语句时,还要在前面额外加上一句++i ,比如:

1
2
3
4
5
6
7
8
9
10
11
while(i<10)
{
if(...)
{
++i;
cotinue;
}
...
...
++i;
}

如果不加这一句,直接continue,那么最后一句++i就不会被执行,循环就会出错。

所以我”机智“地类比,把这个用法也推广到了for循环中……

时至今日,才发现了这个坑……

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
int main()
{
int i=0;
while(i<10)
{
if(i==5)
{
++i;
continue;
}
printf("%d ",i);
++i;
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
int main()
{
int i;
for(i=0;i<10;++i)
{
if(i==5)
{
++i;
continue;
}
printf("%d ",i);
}
return 0;
}

看起来作用一样,然而这两个程序运行结果却并不一致。

第一个程序,很容易就看出结果是0 1 2 3 4 6 7 8 9

第二个程序,结果是0 1 2 3 4 7 8 9

为什么会这样呢?

原因就是我一直认为for语句中的这个++i,和while循环最后一行的++i性质是一模一样可以替换的,但是,for语句里的++i实际上是独立于花括号里的循环体之外的

这样一来,continue前面的++i就是画蛇添足了。

所以for语句里使用continue不要在前面加上++i啦!

除非……你有特殊的癖好,代码风格是这样的:

1
2
3
4
5
6
7
8
9
10
for(i=0;i<10;)
{
if(i==5)
{
++i;
continue;
}
printf("%d ",i);
++i;
}

所以说代码还是要多敲,像这些C语言教程里没有特地提出(大概?)的坑,还是要自己一步一步地踩出来的……

_(:з」∠)_

文章目录
|