如何用qsort比较struct结构中的数据
时间: 2023-04-08 10:04:14 浏览: 74
可以使用qsort函数和自定义比较函数来比较struct结构中的数据。首先,定义一个结构体类型和一个比较函数,然后在qsort函数中使用该比较函数进行排序。比较函数应该返回一个整数值,表示两个元素的大小关系。例如,如果第一个元素小于第二个元素,则返回负数;如果第一个元素等于第二个元素,则返回0;如果第一个元素大于第二个元素,则返回正数。以下是一个示例代码:
```
#include <stdio.h>
#include <stdlib.h>
struct student {
char name[20];
int age;
float score;
};
int compare(const void *a, const void *b) {
const struct student *s1 = (const struct student *)a;
const struct student *s2 = (const struct student *)b;
if (s1->score < s2->score) return -1;
if (s1->score > s2->score) return 1;
return 0;
}
int main() {
struct student s[3] = {
{"Tom", 20, 80.5},
{"Jerry", 19, 90.0},
{"Alice", 21, 75.0}
};
qsort(s, 3, sizeof(struct student), compare);
for (int i = 0; i < 3; i++) {
printf("%s %d %.1f\n", s[i].name, s[i].age, s[i].score);
}
return 0;
}
```
在上面的示例代码中,我们定义了一个名为student的结构体类型,包含三个字段:name、age和score。然后,我们定义了一个名为compare的比较函数,用于比较两个student类型的元素。在main函数中,我们创建了一个包含三个元素的student数组,并使用qsort函数对其进行排序。最后,我们遍历数组并输出排序后的结果。