#include<stdio.h>
void main() {
int x = 0,y = 0,k = 0;
for(k = 0; k < 5; k++){
if(++x > 2 && ++y > 2) x++;
}
printf("x = %d and y = %d",x,y);
}
我无法理解上面的代码如何生成x = 6和y = 3.
已解决:我不知道当有&amp;&amp;时,如果第一个语句的评估结果为false,则第二个语句将不会被执行。
答案 0 :(得分:4)
&&
是短路运算符。
第一次循环,只评估++x
第二次循环,只评估++x
第三次通过循环,两者都被评估
...
答案 1 :(得分:3)
与您的问题无关,但请阅读What should main() return in C and C++? int
。
c启用短路,&&
是一个跟随它的运营商。所以,这个:
if(++x > 2 && ++y > 2)
表示:
x
增加1。x
大于2(因此&&
的第一个操作数为真),
评估第二个操作数。y
增加1,如果y > 2
为{}
是的,那么整个if条件都是真的。您的代码与此相同:
#include <stdio.h>
int main() {
int x = 0, y = 0, k = 0;
for(k = 0; k < 5; k++){
x = x + 1;
if(x > 2)
{
y = y + 1;
if(y > 2)
{
x = x + 1;
}
}
}
printf("x = %d and y = %d", x, y);
return 0;
}
答案 2 :(得分:1)
&&
是短路运营商。
if ( ++x > 2 && ++y > 2 )
在此if
语句中,仅当第一个操作数为真时才会计算第二个操作数。
k=0
X
增加1
时。现在x
值为1
。 x > 2
是假的。因此Y
不会增加。k=1
X
增加1
时。现在X
值为2
。 X > 2
是假的。因此Y
不会增加。k=2
X
增加1
时。现在X
值为3
。 X > 2
是真的。因此Y
将增加1
。现在Y
值为1
。但Y > 2
是假的。因此总条件为false
。k=3
X
增加1
时。现在X
值为4
。 X > 2
是真的。因此Y
将增加1
。现在Y
值为2
。但Y > 2
是假的。因此总条件为false
。k=4
X
增加1
时。现在X
值为5
。 X > 2
是真的。因此Y
将增加1
。现在Y
值为3
。 Y > 2
是真的。因此总条件是true
。然后X
会增加1
。答案 3 :(得分:-1)
if(++x > 2 && ++y > 2)
在此行中,如果第一个条件为假,则不会评估第二个条件。所以第一个条件是假的,直到x的值为3