讨论/算法和数据结构/为啥等于0啊,不等于20?/
为啥等于0啊,不等于20?

输入15,20

#include<stdio.h>

int main(void) {
    int a,b,t;
    t=0;
    scanf("%d,%d",&a,&b);
    if(a>b) t=a;a=b;b=t;
    printf("%d",b);
    return 0;
}

为啥等于0啊,不等于20?

共 8 个回复

a=b
b=t
是if之外的语句

2

没加括号

1

楼上正解

1

楼上正解

1

赋值运算是右结合的,也就是先算右边再算左边

1

b=t不受if控制,一定会执行(t又是0),彻底把b置成0了。

1

你这代码等价于:

if(a>b)
    t=a;
a=b;
b=t;

因为a<b,所以让b的值(20)赋值给a,又把t的值(0)赋值给b,所以b的值为0了

你想要的功能是不是,当a>b的时候交换a与b的值,否则不变?那你需要把后续语句写在同一个代码块里,像这样:

if(a>b) 
{
    t=a;
    a=b;
    b=t;
}

因为if语句后面你没有用花括号把交换那三个语句括起来,所以默认if后面只作用一条语句,然后a=20,b=0,所以输出打印b是0