这段代码如何产生 6 和 3 的输出?
How does this code produces an output of 6 and 3?
#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 的。
已解决:我不知道当有 && 时,如果第一个语句的计算结果为 false,则不会执行第二个语句。
&&
是一个 短路 运算符。
第一次循环,只评估++x
。
第二次循环,只评估 ++x
。
第三次循环,两者都被评估。
...
与您的问题无关,但请阅读What should main() return in C and C++? int
。
c 启用 短路 ,并且 &&
是紧随其后的运算符。所以,这个:
if(++x > 2 && ++y > 2)
说:
- 将
x
增加 1。
- 如果
x
大于2(因此&&
的第一个操作数为真),
计算第二个操作数。
- 第二个操作数表示将
y
递增 1,如果 y > 2
是
true,则整个 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;
}
if(++x > 2 && ++y > 2)
在这一行中,如果第一个条件为假,则不会评估第二个条件。所以第一个条件为假,直到 x 的值为 3
&&
为短路运算符
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 。所以如果条件是 false
.
- 当
k=3
X
将递增 1
。现在 X
值为 4
。 X > 2
是真的。所以 Y
将增加 1
。现在 Y
值为 2
。但是 Y > 2
是 false 。所以如果条件是 false
.
- 当
k=4
X
将递增 1
。现在 X
值为 5
。 X > 2
是真的。所以 Y
将增加 1
。现在 Y
值为 3
。 Y > 2
是真的。如果条件为 true
,那么总计。然后 X
将递增 1
.
- 最后的答案是X=6和Y=3。
#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 的。
已解决:我不知道当有 && 时,如果第一个语句的计算结果为 false,则不会执行第二个语句。
&&
是一个 短路 运算符。
第一次循环,只评估++x
。
第二次循环,只评估 ++x
。
第三次循环,两者都被评估。
...
与您的问题无关,但请阅读What should main() return in C and C++? int
。
c 启用 短路 ,并且 &&
是紧随其后的运算符。所以,这个:
if(++x > 2 && ++y > 2)
说:
- 将
x
增加 1。 - 如果
x
大于2(因此&&
的第一个操作数为真), 计算第二个操作数。 - 第二个操作数表示将
y
递增 1,如果y > 2
是 true,则整个 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;
}
if(++x > 2 && ++y > 2)
在这一行中,如果第一个条件为假,则不会评估第二个条件。所以第一个条件为假,直到 x 的值为 3
&&
为短路运算符
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 。所以如果条件是false
. - 当
k=3
X
将递增1
。现在X
值为4
。X > 2
是真的。所以Y
将增加1
。现在Y
值为2
。但是Y > 2
是 false 。所以如果条件是false
. - 当
k=4
X
将递增1
。现在X
值为5
。X > 2
是真的。所以Y
将增加1
。现在Y
值为3
。Y > 2
是真的。如果条件为true
,那么总计。然后X
将递增1
. - 最后的答案是X=6和Y=3。