输入三个数排序,输出结果为乱码
首先,你这里传过去的只是值,传值调用并不能改变原来实参的大小 。
其次你的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;
}