gpt4 book ai didi

c - C 结构体数组中的 qsort()

转载 作者:行者123 更新时间:2023-11-30 18:33:29 25 4
gpt4 key购买 nike

我试图对需要 20 个输入的结构数组进行排序,并使用 C 的标准库函数 qsort() 对它们进行排序,但没有得到正确排序的输出。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#pragma pack(1)
struct player{
char name[4];
short age;
short match;
float average;
};
#pragma pack()
int comp(const void *p,const void *q){
float *a=(float*)p;
float *b=(float*)q;
if(*b-*a>0)return 1;
if(*b-*a<0)return 1;
if(*b-*a==0)return 0;
}
int main(){
struct player list[20];
for(int i=0;i<20;i++){
scanf("%s",list[i].name);
scanf("%hu %hu %f",&list[i].age,&list[i].match,&list[i].average);
}
qsort((void*)list,20,sizeof(struct player),comp);
for(int i=0;i<20;i++){
printf("%2.2f %10s %4hu %4hu\n",list[i].average,list[i].name,list[i].age,list[i].match);
}
return 0;
}

可以使用以下测试用例来检查输出。

aaa 21  22  34
qsd 33 21 44
qqq 1 2 55.2
www 33 22 12.2
ewe 22 11 13.3
qaz 22 33 12.33
aaa 21 22 34
qsd 33 21 44
qqq 1 2 54.2
www 33 22 12.2
eee 22 11 16.3
qaz 22 33 18.33
aaa 21 22 34
qsd 33 21 49
qqq 1 2 52.2
www 33 22 12.2
eee 22 11 10.3
qaz 22 33 11.33
eee 22 11 14.3
qaz 22 33 11.33

最佳答案

使用如下比较函数:

int comp(const void *p, const void *q) {
struct player *p1 = (player*)p;
struct player *p2 = (player*)q;

if (p1->average > p2->average) return 1;
if (p1->average < p2->average) return -1;
return 0;
}

关于c - C 结构体数组中的 qsort(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57150927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com