改变字符格式结果就出错了,原因为何?

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>


int main(void)
{
    printf("请输入三只小猪的体重:");
    int pig1, pig2, pig3;
    scanf("%d %d %d", &pig1, &pig2 ,&pig3);
    if (pig1 > pig2)
    {
        if (pig1 > pig3)
        {
            printf("第一只小猪最重,体重为%d\n", pig1);
        }
        else
        {
            printf("第三只小猪最重,体重为%d\n", pig3);
        }
    }
    else
        if (pig2 > pig3)
        {
            printf("第二只小猪最重要,体重为%d\n", pig2);
        }
        else
        {
            printf("第三只小猪最重要,体重为%d\n", pig3);

        }
    system("pause");
    return EXIT_SUCCESS;
}

把%d换成%f后输出结果就是是0.0000 了

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>


int main(void)
{
    printf("请输入三只小猪的体重:");
    int pig1, pig2, pig3;
    scanf("%f %f %f", &pig1, &pig2 ,&pig3);
    if (pig1 > pig2)
    {
        if (pig1 > pig3)
        {
            printf("第一只小猪最重,体重为%f\n", pig1);
        }
        else
        {
            printf("第三只小猪最重,体重为%f\n", pig3);
        }
    }
    else
        if (pig2 > pig3)
        {
            printf("第二只小猪最重要,体重为%f\n", pig2);
        }
        else
        {
            printf("第三只小猪最重要,体重为%f\n", pig3);

        }
    system("pause");
    return EXIT_SUCCESS;
}

一开始我也不知道,下面的链接可以告诉我们scanf函数是怎么处理接收的数据的。

https://blog.csdn.net/weixin_43716338/article/details/112174412

那肯定啊,你定义的变量是int类型,然后输入你使用%f,编译器将其全都转换为浮点数0.0000了。如果非要使用%f格式化输入话,将变量改为double类型即可。