c语言为什么往scanf里输入值最终得到的值为1?

问题遇到的现象和发生背景

c语言为什么往scanf里输入值最终得到的值为1?

问题相关代码,请勿粘贴截图
#include <stdio.h>
int main()
{
    int a, b, c;
    a = scanf("%d", &a);
    b = scanf("%d", &b);
    c = scanf("%d", &c);
    printf("a:%d\t b:%d\t c:%d\t \n", a, b, c);
    if (a > b) {
        if (a > c) {
            printf("a小猪体重最重");
        }
        else {
            printf("c小猪体重最重");

        }
    }
    else {
        if (b > c) {
            printf("b小猪体重最重");
        }
        else {
            printf("c小猪体重最重");
        }
    }
}

运行结果及报错内容

img

img


直接输入就可以了,没必要输入再赋值给a,b,c,这样按细节处理来说,处理的不是很妥当。
a=scanf("%d",&a);
b=scanf("%d",&b);
c=scanf("%d",&c);
改成:
scanf("%d",&a);
scanf("%d",&b);
scanf("%d",&c);
就可以了。因为输入的时候,已经通过scanf赋值给a,b,c了。
以上仅供参考,希望对题主有所帮助!

scanf() 函数的返回值,就是它读入成功参数的个数。 scanf("%d", &a); 如果读入成功,它返回1 , scanf("%d%d", &a,&b); 这句读入成功它返回 2.
所以代码里:
a = scanf("%d", &a);
b = scanf("%d", &b);
c = scanf("%d", &c);
这三句修改为:scanf("%d%d%d",&a,&b,&c); 即可。
如果想加入读入是否成功的判断,这么写:
if(scanf("%d%d%d",&a,&b,&c) == 3)
{
}
else
{
}

scanf的返回值指的是成功读取赋值的数量