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 这段代码如何生成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

我无法理解上面的代码是如何生成x=6和y=3的

已解决:我不知道当存在&&时,如果第一条语句的计算结果为false,则第二条语句将不会执行。

&&&
是一个短路运算符

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
    增加1
  • 如果
    x
    大于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
    ,则为total
  • k=3
    X
    将递增
    1
    。现在
    X
    值是
    4
    <代码>X>2为真。因此,
    Y
    将增加
    1
    。现在
    Y
    值是
    2
    。但是
    Y>2
    是错误的。因此,如果条件为
    false
    ,则为total
  • k=4
    X
    将递增
    1
    。现在
    X
    值是
    5
    <代码>X>2为真。因此,
    Y
    将增加
    1
    。现在
    Y
    值是
    3
    <代码>Y>2为真。因此,如果条件为
    true
    ,则为总计。然后,
    X
    将增加
    1
  • 最后的答案是X=6Y=3

  • 你还不明白什么?增量?if语句?什么?使用调试器或
    printf
    查看每次迭代的每个变量的值。它将帮助您了解它是如何一步一步地在循环中打印k、x和y的,并查看发生了什么事,无论是谁作为dup CVed:它不是!我撤回了我的投票……不知道为什么没有。我投票赞成,我不喜欢这样的措辞:“第一个操作数是真的,那么只有第二个操作数会被计算。”看起来你是说第二个操作数会被计算,而第一个不会。我不是母语人士,但我认为您应该将其更改为“仅当第一个操作数为真时,才会计算第二个操作数”,以避免歧义(对于阅读本文的母语人士,您能告诉我我是否正确吗?)。或者,为了简单起见,我会将其改写为“在这个
    if
    语句中,第二个操作数将仅在第一个操作数为true时进行求值。”
    if ( ++x > 2 && ++y > 2 )