在do while循环中继续执行语句

时间:2020-09-29 13:03:04

标签: c while-loop continue

#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语句后会发生什么?

控件在哪里?

4 个答案:

答案 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语句将控制权传递给的下一个迭代 其中包含最近的 dofor while 声明, 绕过doforwhile语句中的所有剩余语句 身体

因为其中最接近的一个是while(false)语句,所以执行流程将继续执行该语句,并退出循环。

即使continuewhile(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”,因此迭代停止。