【发布时间】:2013-11-28 04:16:32
【问题描述】:
我正在尝试对我的记录进行 qsort 排序,以便它按名称按升序对记录进行排序。如果有同名的名字,它会按降序排列他们的成绩
例如:原始文本文件
simpson bart 25
simpson bart 35
simpson lisa 90
simpson bart 34
期望的输出:
simpson bart 35
simpson bart 34
simpson bart 25
simpson lisa 90
这就是我所拥有的:
int sort_nameasc_gradedes(const void *p, const void *q)
{
const record *pp = p;
const record *qq = q;
int n1 = strcmp(pp->name.first, qq->name.first);
int n2 = strcmp(pp->name.last, qq->name.last);
if (n2 == 0 && n1 != 0) {
return n1;
} else if (n2 != 0 && n1 == 0) {
return n2;
} else {
return (pp->score - qq->score);
}
}
这不能正常工作。
提前致谢。
【问题讨论】:
-
您正在对三个字段进行排序,但您的描述仅涉及 2。
-
虽然这里不太可能出现问题,但通常您应该避免使用
return (pp->score - qq->score);,因为如果值大到足以导致溢出,它的行为未定义。
标签: c sorting typedef strcmp qsort