c语言 qsort 对结构体数组排序

2024年12月02日 18:49
有1个网友回答
网友(1):

■可能的一个原因是compare 里给a、b赋值的时候,后面强制类型转换应为(struct record *)而非(record *)。
■可能另一个原因是你的源文件名后缀(DECVPP据此判断是C程序还是C++程序),如果是纯C的,就用.c;如果是C++的,用.cpp。
■还有可能是你没有包含必要的头文件?
我根据你的代码做了个简单的测试,在VC6下运行正常(由大到小按point排)。
#include
#include
struct record
{
char name[35];
int point;
int match[3];
int goal[2];
} ;

int compare(const void *p1,const void *p2);
void input(struct record s[], int n);
void output(struct record s[], int n);

int main()
{
struct record team[35];
int teams = 35;
input(team, 5);
qsort(team,teams,sizeof(team[0]),compare);
output(team, 5);
return 0;
}

int compare(const void *p1,const void *p2)
{
struct record *a= (struct record *)p1;
struct record *b= (struct record *)p2;
int result=0;
if(a->point > b->point)
return -1;
else if(a->point< b->point)
return 1;
else
return 0;

}

void output(struct record s[], int n)
{
int i=0;
while(i {
printf("%d ",s[i].point);
i++;
}
return;
}

void input(struct record s[], int n)
{

int i=0;
while(i {
scanf("%d",&(s[i].point));
i++;
}
return;
}
是否可以解决您的问题?