你犯得貌似都是基本的语法错误:
1.函数的声明应该放在主函数main之前,而不是放在main 里面。即void cmp(char *p1,char *p2);应该写在在main()之前。
2.要想使用getch()需要包含头文件conio.h。因此要加上 #include <conio.h>
3.getch()函数是有返回值的,应该把它的赋值给一个变量。可以写:
char ch;
ch=getch();
呵呵,忘了你的算法错误了。
在调用指针作形参的时候如void cmp(char *p1,char *p2);是属于单向值传递的。
如语句cmp(p1,p2);无论在函数中如何对p1,p2修改和赋值,它们的实际值(实参)是不会有任何改变的。
以下程序是修改后编译通过并且排序成功的的,希望对你有所帮助
#include "stdio.h"
#include "string.h"
#include <conio.h>
void cmp(char *p1,char *p2);
extern char *max="\0";
extern char *min="\0";
void main()
{
char a[80];
char b[80];
char c[80];
char *p1,*p2,*p3,*tmp1,*tmp2;
char ch;
printf("Enter 3 strings:");
gets(a);
gets(b);
gets(c);
p1=a;
p2=b;
p3=c;
cmp(p1,p2);
cmp(p1,p3);
cmp(p2,p3);
if(p1!=min&&p1!=max)p2=p1;
else if(p2!=min&&p2!=max)p2=p2;
else if(p3!=min&&p3!=max)p2=p3;
p1=min;
p3=max;
puts(p1);
puts(p2);
puts(p3);
ch=getch();
}
void cmp(char *A,char *B)
{
char *temp;
if(strcmp(A,B)>0)
{
min=B;
if(strcmp(max,A)<0) max=A;
}
else
{
min=A;
if(strcmp(max,B)<0) max=B;
}
}
温馨提示:答案为网友推荐,仅供参考