把三个字符串按小到大排序输出,帮忙看一下这个程序哪里错了

#include<stdio.h>
#include<string.h>
main()
{
void Compare(char*p1,char*p2,char*p3);
char str1[80]={'\0'},str2[80]={'\0'},str3[80]={'\0'};
printf("请输入字符串:\n");
gets(str1);
gets(str2);
gets(str3);
Compare(str1,str2,str3);
printf("字符由小到大为:\n");
puts(str1);
puts(str2);
puts(str3);
printf("\n");

}
void Compare(char*p1,char*p2,char*p3)
{
char *temp;
if(strcmp(p1,p3)>0)
{
temp=p1;
p1=p3;
p3=temp;
}
if(strcmp(p1,p2)>0)
{
temp=p1;
p1=p2;
p2=temp;
}
if(strcmp(p2,p3)>0)
{
temp=p2;
p2=p3;
p3=temp;
}
}

整个程序处理的思想没有问题。

问题在于,函数以指针作为输入参数,指针在函数内部进行了指向的修改,这种修改无法传递到函数外部。需要修改compare函数,改成修改指针所指内容的值

void Compare(char*p1, char*p2, char*p3)
{
 char temp[80];
 if (strcmp(p1, p3) > 0)
 {
  strcpy(temp,p1);
  strcpy(p1,p3);
  strcpy(p3,temp);
 }
 if (strcmp(p1, p2) > 0)
 {
  strcpy(temp,p1);
  strcpy(p1,p2);
  strcpy(p2,temp);
 }
 if (strcmp(p2, p3) > 0)
 {
  strcpy(temp,p2);
  strcpy(p2,p3);
  strcpy(p3,temp);
 }
}

结果为:

温馨提示:答案为网友推荐,仅供参考
相似回答