今天我做了一个拼写错误,然后发现下面的代码可以成功编译:
#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
可以作为一种条件对待吗?
答案 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
}
}