我用一个编译器编写了以下代码,该编译器配置为使用eclipse符合c89标准。
#include <stdio.h>
int main(void) {
int i=0;
printf("initial value for variable i is: %d\n",i);
while (i<3)
{
if (i==1) {continue;}
printf("%d\n",i);
i++;
}
return 0;
}
问题是代码不会被执行(根本没有错误),并且控制台中没有任何显示。删除下面的代码行if (i==1) {continue;}
时,一切正常。
答案 0 :(得分:3)
当i
为1
时,它的值保持不变,因此在下一次迭代和下一次迭代中,它仍然是1
,并且……需要很长时间从1
更改。
for
循环的一个优点是它将循环控件捆绑在一行中。您不会看到for (i = 0; i < 3; i++)
作为循环的问题; continue
将跳到循环控件中的i++
。
您说您正在使用Eclipse作为您的IDE。这可能就是为什么根本没有输出的原因。它的“终端”在程序中显示为非终端,因此I / O被完全缓冲(而不是像终端输出那样通常被行缓冲)。反过来,这意味着在缓冲区填满,调用fflush(stdout)
或程序停止之前,不会出现任何输出。这是Eclipse的一个已知问题。您可以致电setvbuf()
:在开头添加一行setvbuf(stdout, NULL, _IOLBUF, BUFSIZ);
,以确保行缓冲有效。