C循环有两个条件 - 差异

时间:2017-07-05 22:59:20

标签: c loops difference

区别:

int i;
for( i=0;i<5 && i<3;i++)
{
    printf("stackoverflow.com");
}

int i;
for( i=0;i<5 , i<3;i++)
{
    printf("stackoverflow.com");
}

我的意思是使用&amp;&amp;而不是&#39;,#39;

此致

3 个答案:

答案 0 :(得分:1)

在第二个代码块中,实际上只使用i < 3来评估循环是否应该退出。将评估i < 5表达式,但会丢弃其值。有关详细信息,请参阅comma operator

您的示例之间在功能上没有区别,因为i < 3是限制性表达式并且显示在第二位。当我达到3时,两个循环都将退出。但是,如果您切换条款以便i < 3, i < 5,则第二个在达到5时启动,因为只考虑i < 5的值。

答案 1 :(得分:0)

在如下语句中使用逗号运算符,时:

( <expression1>, <expression2> )

评估并丢弃<expression1>,然后评估<expression2>并返回其值。总之,评估最右边的表达式并返回其值。评估并丢弃其他表达式。所以你的陈述:

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

相当于:

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

至于第一个陈述,这个表达式:

(i<5 && i<3)

是一个简单的AND布尔评估。一个搞笑一个,因为它足以说:

(i<3)

长话短说,谁做过这个例子可能希望你说&#34; 这两个条件都评估为第二个表达&#34;。

答案 2 :(得分:0)

在这种情况下,他们将完全一样。

不同之处在于,在第一种情况下,每次都不会评估i<3。如果A && B的返回值为B,则表单A上的语句只会执行true。原因是如果两个操作数都为真,则&&的逻辑值为真。如果其中一个为假,则整个表达式为false,因此如果左操作数的计算结果为false,则不需要计算正确的操作数。

另一方面,逗号运算符计算两个操作数,但左操作数的结果将被丢弃。