Я пытаюсь выполнить qsort свою запись, чтобы сортировать записи по имени в порядке возрастания. Если есть имя с тем же именем, он сортирует их оценки в порядке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
Хотя это вряд ли будет проблемой здесь, в общем, вы должны избегать использования ' return (pp-> score - qq-> score); 'поскольку он имеет неопределенное поведение, если значения достаточно велики, чтобы вызвать переполнение. –