有一说一,这个c语言的qsort真的很难用,这里cmp的写法需要大家注意下,否则很难过关
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
typedef struct student{
int num, age;
char name[15];
} student;
int cmp(const void *s1, const void *s2) {
student* a = (student*) s1;
student* b = (student*) s2;
if (a->age == b->age && a->num == b->num) return strcmp(a->name, b->name);
else if (a->age == b->age) return a->num - b->num;
return a->age - b->age;
}
int main() {
int n;
student stu[35];
while (scanf("%d", &n) != EOF) {
for (int i = 0; i < n; i++) {
int num, age;
char name[15];
scanf("%d %s %d", &num, name, &age);
stu[i].num = num;
strcpy(stu[i].name, name);
stu[i].age = age;
}
qsort(stu, n, sizeof(student), cmp);
for (int i = 0; i < 3; i++) {
printf("%d %s %d\n", stu[i].num, stu[i].name, stu[i].age);
}
}
return 0;
}

京公网安备 11010502036488号