for(i = 0; 0; i)在c中执行恰好一次为什么?

时间:2012-09-10 17:05:00

标签: c loops for-loop

for(i=0; 0; i)
{
    //statement
}

为什么语句只执行一次?要么它不执行语句,要么语句应该进入无限循环。但该声明只执行一次。你能帮我吗?

5 个答案:

答案 0 :(得分:5)

实际上,该行不会执行该语句。我会再次查看你的程序,看看是否有其他输出/语句被错误识别为块中语句的输出

#include <stdio.h>

int main(int argc, char** argv)
{
  int i;
  for (i = 0; 0; i) {
    printf("i is %d\n", i);
  }
  return 0;
}

当跑步时没有输出。

另一种可能性是您的源代码现在与二进制文件不同步,这种情况偶尔会出现在手动编译C系统中。尝试删除.o目标文件,生成的二进制文件,并从头开始重新编译。如果执行消失,也许您需要更仔细地查看如何实现构建。

答案 1 :(得分:5)

确保在for循环之后没有分号,否则编译器将使用分号作为循环的结尾,并且以下大括号中的任何内容都将执行一次。

for(i=0; 0; i); // end of loop

{
   // do something once
}

你的例子中没有分号,但我看到人们经常在编程课程中这样做,而且它运行一次的事实就是这个错误的症状。只是一个建议。

答案 2 :(得分:1)

这是关于for循环的C99标准的引用:

6.8.5.3 The for statement 1 The statement
     

for(clause-1; expression-2; expression-3)

     

语句的行为如下:表达式表达式-2是   控制在每次执行之前计算的表达式   循环体。表达式-3被评估为空白   每次执行循环体后的表达式。如果第1条是a   声明,它声明的任何变量的范围是余数   声明和整个循环,包括其他两个   表达式;它是在第一个之前按执行顺序到达的   评估控制表达。如果第1条是一个   表达式,它在第一个之前被计算为void表达式   控制表达式的评估.134)

由于条件是假的,它甚至不应该执行一次。所以它显然是你使用的编译器中的一个错误。

答案 3 :(得分:0)

尝试

for (i = 0; i < 10; i++)

然后在谷歌上查找for循环。 for循环有三个部分

初始化;循环结束条件;增量。

为什么你的代码说,可能不是你的意思。

答案 4 :(得分:0)

这个循环甚至不会执行一次,因为终止条件是0,即假

for(i=0; 0; i)
{
  printf("%d",&i)
}

不打印任何东西。