我想排列我的记录,以便按名称按升序对记录进行排序。如果有名称以相同的名称,它会他们的成绩降序排列C - 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. – woolstar
虽然这是不可能在这里是一个问题,一般来说,你应该避免使用'返回(pp-> score - qq-> score);'因为如果值足够大而导致溢出,则它具有未定义的行为。 –