C循环的条件

时间:2014-08-01 10:05:36

标签: c loops

今天我做了一个拼写错误,然后发现下面的代码可以成功编译:

#include <stdio.h>
int main()
{
    int i;
    for (i=0;1,2,3,4,5;i++)
        printf("%d\n", i);
}

我不明白为什么

1,2,3,4,5

可以作为一种条件对待吗?

7 个答案:

答案 0 :(得分:5)

您的for条件是表达式1,2,3,4,5。此表达式使用C's comma operator进行评估,并生成5。值5是一个有效的布尔表达式,它是真的,因此导致无限循环。

答案 1 :(得分:3)

您正在使用逗号运算符1, 2, 3, 4, 5的值为5。

更一般地说,a, b的值为b。此外,f(), g()的值是g()的返回值,但是子表达式f()g()都会被评估,因此会调用这两个函数。

答案 2 :(得分:1)

是。正如其他人所说的那样。总是正确的,逗号运算符产生5,因此循环将重复无限次

您可以将 5 替换为 0 来验证它。像这样 1,2,3,4,0

此处 0 为false,因此条件失败。

答案 3 :(得分:0)

是的,1,2,3,4,5可被视为一种条件。

1,2,3,4,5的输出为5。

实际上,您无需在for循环中指定任何条件。

for(;;)是一种有效的语法。

答案 4 :(得分:0)

for循环:

for( E1; E2; E3 )
  IB

表达式E1,E2,E3和指令IB相当于while循环:

E1;
while( E2 )
{
    IB;
    E3;
}

唯一的例外是E2,它必须出现在while循环条件中,而在for循环条件中可以省略(然后它被认为是等于1)。

所以,正如其他人已经说过的那样,你的1,2,3,4,5是一个等同于常量5逗号表达式,使循环无限循环。

答案 5 :(得分:-1)

看到此代码运行...但for循环无限期地继续。始终验证条件 1,2,3,4,5 。 编译器在for循环中接受更多的条件。例如:

for(i=0, j=0; i<X, j>y; i++, j--)
    //.....

所以 1,2,3,4,5 是五个条件(不是一个)并且所有这些条件都经过验证(实际上,这些数字都与0不同,所以他们是&#39;总是 true )。

答案 6 :(得分:-2)

//尝试了解条件的含义。

#include <stdio.h>
int main()
{
  int i=0;
  if(i<=5) // try this
  {
    printf("%d\n",i); 
    i++;   // increment i 
  }

}