继续说明

问题描述 投票:0回答:2

我是 C 新手,因此遇到了这个问题,Continue 语句是为了跳过迭代,但这里我的代码是

int i = 0;
do
{
  if(i== 10)continue;
  printf("\n This is = %d",i);
  
  i++;
} while (i<20);

我的理解是它会跳过

这是 = 10

休息它会打印,但从那时起它就跳过了

这是 = 9 到 19

这是输出

 This is = 0
 This is = 1
 This is = 2
 This is = 3
 This is = 4
 This is = 5
 This is = 6
 This is = 7
 This is = 8

为什么?

另外,当我在这个循环之前添加 for 循环时,它完全被忽略并且没有被执行?

int i = 0;
do
{
  if(i== 10)continue;
  printf("\n This is = %d",i);
  
  i++;
} while (i<20);

for(int a = 0 ; a<20 ; a++)
{
    if(a==10)continue;
    printf("\nHere = %d",a);
}

输出:

 This is = 0
 This is = 1
 This is = 2
 This is = 3
 This is = 4
 This is = 5
 This is = 6
 This is = 7
 This is = 8

为什么?请解释一下。

c continue
2个回答
0
投票

在这个 do-while 循环中,当 i 等于 10 时

int i = 0;
do
{
  if(i== 10)continue;
  printf("\n This is = %d",i);
  
  i++;
} while (i<20);

然后由于 continue 语句,它看起来像

int i = 0;
do
{
  i = 10;
  if(i== 10)continue;
} while (i<20);

并且你有一个无限循环。

因为循环后的代码有一个无限循环,包括 teh fir 语句

for(int a = 0 ; a<20 ; a++)
{
    if(a==10)continue;
    printf("\nHere = %d",a);
}

无法控制。


0
投票

这里发生了一些事情。首先,

printf
格式字符串以换行符开头,但不以换行符结尾。这与通常所做的相反。但由于每个打印的字符串都不以换行符结尾,因此它很可能会被缓冲到下一个换行符为止。所以事实上,它正在打印
" This is = 10"
,但实际上直到下一个换行符才出现,而下一个换行符永远不会出现。

下一个换行符永远不会到来的原因是,一旦

i
10
,它就会进入无限循环。每次执行时,它都会进行比较
i == 10
,这是正确的,因此它立即继续循环,从不执行
i++;
增量。在后一个示例中,永远不会到达
for
循环,因为它陷入了
do
/
while
循环中。

为了解决第一个问题,我建议使用传统的格式字符串,例如

printf("This is = %d\n",i);
当换行符位于末尾时,通常会立即看到
printf
(至少在未重定向到文件时)。或者,您可以在调用
fflush(stdout)
后立即调用
printf
来强制刷新缓冲区。无论你的换行符在哪里,这都会起作用。

第二个问题可以通过在继续之前增加

i
来解决,例如

if (i== 10) {
    i++;
    continue;
}
© www.soinside.com 2019 - 2024. All rights reserved.