我是 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
为什么?请解释一下。
在这个 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);
}
无法控制。
这里发生了一些事情。首先,
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;
}