我想排列我的記錄,以便按名稱按升序對記錄進行排序。如果有名稱以相同的名稱,它會他們的成績降序排列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);'因爲如果值足夠大而導致溢出,則它具有未定義的行爲。 –