【发布时间】:2021-04-07 06:52:11
【问题描述】:
它应该按姓氏的字母顺序对学生进行排序。我试着用 qsort,但它不起作用。
struct student {
char name[30];
char lastName[30];
char grades[30][5];
int numberOfGrades;
};
int compare(const void *a, const void *b) {
struct group *s1 = (struct group *)a;
struct group *s2 = (struct group *)b;
return strcmp(s1->lastName, s2->lastName);
}
int main()
{
struct student group[30];
group[0].lastName = "Malaska";
group[1].lastName = "Kowalski";
group[2].lastName = "Adamczyk";
group[3].lastName = "Bakiewicz";
int numberOfStudents = 4;
qsort(group, numberOfStudents, sizeof(group), compare);
}
【问题讨论】:
-
一方面,您不能使用
group[0].lastName = "Malaska";分配字符串值,请使用strcpy(group[0].lastName, "Malaska");另一个,compare()函数正在转换为您未显示的不同类型。跨度> -
你应该通过
sizeof(struct student)而不是sizeof(group) -
sizeof(group)应该是sizeof(group[0])或sizeof(struct student)