循环C中的多个条件

我遇到这段代码。我通常使用’&&或“||”在for循环中分离多个条件,但此代码使用逗号来做到这一点。令人惊讶的是,如果我改变条件的顺序,输出变化。

#include<stdio.h>
int main(){
int i,j=2;

for(i=0;j>=0,i<=5;i++)
{
     printf("%d ",i+j);
     j--;
}
return 0;        
}

输出= 2 2 2 2 2 2

#include<stdio.h>
int main(){
int i,j=2;

for(i=0;i<=5,j>=0;i++)
{
     printf("%d ",i+j);
     j--;
}
return 0;        
}

输出= 2 2 2

有人可以解释原因吗?它似乎只检查最后一个逗号分隔条件

逗号运算符评估其所有操作数,并产生最后一个的值。所以基本上无论你先写什么条件,都会被忽略,第二个将只有重要的。

for (i = 0; j >= 0, i <= 5; i++)

因此相当于

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

这可能或可能不是代码的作者意图,这取决于他的意图 – 我希望这不是生产代码,因为如果程序员写的这个想要表达条件之间的AND关系,那么这是不正确的, &安培;&安培;应该使用运算符。

http://stackoverflow.com/questions/16859029/multiple-conditions-in-for-loop-c

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:循环C中的多个条件