C 这段代码如何生成6和3的输出? #包括 void main(){ int x=0,y=0,k=0; 对于(k=0;k2&&++y>2)x++; } printf(“x=%d和y=%d”,x,y); }
我无法理解上面的代码是如何生成x=6和y=3的 已解决:我不知道当存在&&时,如果第一条语句的计算结果为false,则第二条语句将不会执行。C 这段代码如何生成6和3的输出? #包括 void main(){ int x=0,y=0,k=0; 对于(k=0;k2&&++y>2)x++; } printf(“x=%d和y=%d”,x,y); },c,post-increment,pre-increment,and-operator,C,Post Increment,Pre Increment,And Operator,我无法理解上面的代码是如何生成x=6和y=3的 已解决:我不知道当存在&&时,如果第一条语句的计算结果为false,则第二条语句将不会执行。&&&是一个短路运算符 if(++x > 2 && ++y > 2) 第一次通过循环时,仅计算++x。 第二次通过循环时,仅计算++x。 第三次通过循环时,将对这两个参数进行评估。 …与您的问题无关,但请阅读int 启用短路,并且和&是遵循该操作的操作员。那么这个, #include<stdio.h> void m
&&&
是一个短路运算符
if(++x > 2 && ++y > 2)
第一次通过循环时,仅计算++x
。第二次通过循环时,仅计算
++x
。第三次通过循环时,将对这两个参数进行评估。
…与您的问题无关,但请阅读
int
启用短路,并且
和&
是遵循该操作的操作员。那么这个,
#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
增加1x
大于2(因此&&
的第一个操作数为真),
计算第二个操作数y
递增1,如果y>2
为
如果为true,则整个if条件将为true您的代码与此等效:
if(++x > 2 && ++y > 2)
#包括
int main(){
int x=0,y=0,k=0;
对于(k=0;k<5;k++){
x=x+1;
如果(x>2)
{
y=y+1;
如果(y>2)
{
x=x+1;
}
}
}
printf(“x=%d和y=%d”,x,y);
返回0;
}
在这一行中,如果第一个条件为false,则不会计算第二个条件。因此,第一个条件为假,直到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
,则为totalk=3
X
将递增1
。现在X
值是4
<代码>X>2为真。因此,Y
将增加1
。现在Y
值是2
。但是Y>2
是错误的。因此,如果条件为false
,则为totalk=4
X
将递增1
。现在X
值是5
<代码>X>2为真。因此,Y
将增加1
。现在Y
值是3
<代码>Y>2为真。因此,如果条件为true
,则为总计。然后,X
将增加1
你还不明白什么?增量?if语句?什么?使用调试器或
printf
查看每次迭代的每个变量的值。它将帮助您了解它是如何一步一步地在循环中打印k、x和y的,并查看发生了什么事,无论是谁作为dup CVed:它不是!我撤回了我的投票……不知道为什么没有。我投票赞成,我不喜欢这样的措辞:“第一个操作数是真的,那么只有第二个操作数会被计算。”看起来你是说第二个操作数会被计算,而第一个不会。我不是母语人士,但我认为您应该将其更改为“仅当第一个操作数为真时,才会计算第二个操作数”,以避免歧义(对于阅读本文的母语人士,您能告诉我我是否正确吗?)。或者,为了简单起见,我会将其改写为“在这个if
语句中,第二个操作数将仅在第一个操作数为true时进行求值。”
if ( ++x > 2 && ++y > 2 )