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

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

4

5 回答 5

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目标文件、生成的二进制文件,然后从头开始重新编译。如果执行消失了,也许你需要更仔细地看看你是如何实现你的构建的。

于 2012-09-10T17:08:38.627 回答
5

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

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

{
   // do something once
}

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

于 2012-09-10T17:17:13.003 回答
1

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

6.8.5.3 The for statement 1 The statement

for ( 子句 1 ; 表达式 2 ; 表达式 3 )

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

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

于 2012-09-10T17:13:22.117 回答
0

尝试

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

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

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

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

于 2012-09-10T17:08:23.090 回答
0

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

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

不打印任何东西。

于 2012-09-10T17:09:26.023 回答