#include
#include
int main()
{
void sort(char *p1,char *p2);
char array[3][100];
int n=3,i,j;
char (*p)[100];
for(i=0;i<3;i++)
gets(array[i]);
p=array;
for(i=0;i<2;i++)
for(j=0;j<2-i;j++) /*改了这里连续2行*/
sort(p[j],p[j+1]);
printf("\n");
for(i=0;i<3;i++)
puts(array[i]); /*puts已经换行了*/
}
void sort(char *p1,char *p2)
{
char b[100];
if(strcmp(p1,p2)>0)
{strcpy(b,p1);
strcpy(p1,p2);
strcpy(p2,b);
}
}
逻辑错了,没有遍历。设A>B、B>C。你交换了A、B,然后A与C比较又交换了A、C,最后排成了B、C、A。A是最大的没错,可你能保证C一定大于B吗?增加一个内循环遍历就可以了:
在声明中增加一个j变量,把主函数中的
for(i=0;i<2;i++)
sort(p[i],p[i+1]);
改成
for(i=0;i<2;i++)
for(j=i+1;j<3;j++)
sort(p[i],p[j]);
就行了。