#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
语句后会发生什么?
控件在哪里?
答案 0 :(得分:6)
下一条语句将是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);
输出+注释以解释:
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
答案 1 :(得分:3)
来自here:
continue语句将控制权传递给的下一个迭代 其中包含最近的
do
,for
,或while
声明, 绕过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)
。
答案 2 :(得分:3)
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 :(得分:1)
当您使用 continue 语句时,循环内的其他语句将被跳过,控制权转到下一个迭代,即您的情况下的“条件检查”(如果是for循环,则转到第三个for循环的语句,其中通常对变量执行递增/递减操作)。由于条件为“ false”,因此迭代停止。