do while 循环中的 continue 语句
Posted
技术标签:
【中文标题】do while 循环中的 continue 语句【英文标题】:continue statement in a do while loop 【发布时间】:2020-09-29 13:03:04 【问题描述】:#include <stdlib.h>
#include <stdio.h>
enum false, true;
int main()
int i = 1;
do
printf("%d\n", i);
i++;
if (i < 15)
continue;
while (false);
getchar();
return 0;
在这段代码中执行continue
语句后会发生什么?
控件去哪了?
【问题讨论】:
@FredLarsoncontinue
将被执行,因为2 < 15
为真。
那个(有效的)结构很容易通过执行程序来检查。
如果你想使用false
和true
(和bool
),你可以#include <stdbool.h>
。
【参考方案1】:
下一个语句将是while (false);
,它结束了do-while
循环,因此之后它执行getchar();
一般:
do
...
statements
...
continue; // Act as "GOTO continue_label"
...
statements
...
continue_label:
while (...);
如果你想尝试一下,你可以使用这个代码:
int i = 0;
do
printf("After do\n");
++i;
if (i < 2)
printf("Before continue\n");
continue;
printf("Before while\n");
while(printf("Inside while\n") && i < 2);
输出+cmets解释:
After do // Start first loop
Before continue // Execute continue, consequently "Before while" is not printed
Inside while // Execute while
After do // Start second loop
Before while // Just before the while (i.e. continue not called in this loop)
Inside while // Execute while
【讨论】:
【参考方案2】:ISO/IEC 9899:2011, 6.8.6.2 继续声明
[...]
(2)
continue
语句导致跳转到循环继续 最小的封闭迭代语句的一部分;也就是说,对 循环体的结尾。更准确地说,在每个陈述中while (/* ... */) /* ... */ continue; /* ... */ contin: ; do /* ... */ continue; /* ... */ contin: ; while (/* ... */); for (/* ... */) /* ... */ continue; /* ... */ contin: ;
[...] 相当于
goto contin;
在这段代码中执行 continue 语句后会发生什么?控件去哪儿了?
到循环结束,即代码中的while ( false )
,将退出循环。
【讨论】:
【参考方案3】:来自here:
continue 语句将控制权传递给 最近的封闭
do
,for
, 或while
statement 它出现在其中, 绕过do
、for
或while
语句中的任何剩余语句 身体
因为其中最接近的是while(false)
语句,所以执行流程继续到该语句,并退出循环。
即使continue
和while(false)
之间还有其他语句也是如此,例如:
int main()
int i = 1;
do
printf("%d\n", i);
i++;
if (i < 15)
continue; // forces execution flow to while(false)
printf("i >= 15\n"); // will never be executed
while (false);
...
这里的continue;
语句意味着它后面的printf
语句将永远不会被执行,因为执行流程会继续到最近的循环结构之一。同样,在这种情况下while(false)
。
【讨论】:
【参考方案4】:当您使用 continue 语句时,循环内的其他语句将被跳过并且控制转到下一个迭代,在您的情况下是“条件检查”(在 for 循环的情况下,它转到第三个for 循环的语句,其中通常对变量进行递增/递减)。由于条件为“假”,迭代停止。
【讨论】:
以上是关于do while 循环中的 continue 语句的主要内容,如果未能解决你的问题,请参考以下文章
C语言基础:循环结构(循环类型(while,do...while,for,嵌套循环),循环控制语句(break,continue,goto),无线循环(死循环))
[转帖]shell 循环语句for/do/done和while/do/done以及break,continue
Java基础第4天+switch语句for,while,do...while循环语句break,return,continue控制跳转语句