运行结果及报错内容,如何解决?

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

输入三个数排序,输出结果为乱码

运行结果及报错内容

img

首先,你这里传过去的只是值,传值调用并不能改变原来实参的大小 。
其次你的compare函数并没有返回值,你这里设置为int并不合适,用print也不会打印。
可以修改为这样:

#include <stdio.h>
void compare(int* a, int* b, int* c)//地址用指针接收
{
    if (*a < *b)//如果a小于b,就a和b交换
    {
        int tmp = *a;
        *a = *b;
        *b = tmp;
    }
    if (*a < *c)//此时,a已经比b大了,如果c还比a大,再交换,让a最大
    {
        int tmp = *a;
        *a = *c;
        *c = tmp;
    }
    if (*b < *c)//最后比较b和c的值就OK了
    {
        int tmp = *b;
        *b = *c;
        *c = tmp;
    }
}
int main()
{
    int n1 = 0, n2 = 0, n3 = 0;
    scanf("%d%d%d", &n1, &n2, &n3);
    compare(&n1, &n2, &n3);//传过去的是地址
    printf("%d %d %d", n1, n2, n3);
    return 0;
}

没学指针的话就直写个没有返回值的函数就行

#include<stdio.h>
void compare(int x,int y,int z);
void compare(int x,int y,int z){
    if(x>y){
        if(y>z){
            printf("%d %d %d",x,y,z);
        }else{
            if(z>x){
                printf("%d %d %d",z,x,y);
            }else{
                printf("%d %d %d",x,y,z);
            }
        }
    }else{
        if(x>z){
            printf("%d %d %d",y,x,z);
        }else{
            if(z>y){
                printf("%d %d %d",z,y,x);
            }
            else{
                printf("%d %d %d",y,z,x);
            }
        }
    }
}
int main(){
    int x,y,z;
    scanf("%d %d %d",&x,&y,&z);
    compare(x,y,z);
    return 0;
}