Я пытаюсь распечатать и отсортировать свою динамическую память записей в порядке убывания, используя qsort. Я использую командную строку, чтобы определить, как следует сортировать записи.
Код для распечатки записей:
void print_records_by_name(record_list *list, int argc, const char *argv[])
{
size_t i;
if (argc == 2) {
if (strcmp(argv[1], "+n") == 0) {
qsort(list->data, list->nused, sizeof(record), sort_name_asc);
} else if (strcmp(argv[1], "-n") == 0) {
qsort(list->data, list->nused, sizeof(record), sort_name_des);
}
}
for (i = 0; i < list->nused; i++) {
fprintf(stdout, "%s %s %d\n", list->data[i].name.last, list->data[i].name.first, list->data[i].score);
}
}
У меня есть код для сортировки по возрастанию:
int sort_name_asc(const void *p, const void *q)
{
const record *pp = p;
const record *qq = q;
int n1, n2;
n1 = strcmp(pp->name.first, qq->name.first);
n2 = strcmp(pp->name.last, qq->name.last);
if (n2 == 0) {
return n1;
}
return n2;
}
Это то, что у меня есть для убывания:
int sort_name_des(const void *p, const void *q)
{
const record *pp = p;
const record *qq = q;
int n1, n2;
n1 = strcmp(qq->name.first, pp->name.first); /*just switched the pp and qq*/
n2 = strcmp(qq->name.last, pp->name.last); /*just switched pp and qq*/
if (n2 != 0) {
return n1;
}
return n2;
}
Я скомпилировал его, и он не работает, есть идеи, как это сделать?
Спасибо
strcmp()
, которые помогут вам понять, какие моды нужно сделать, и решить эту проблему... - person ryyker   schedule 27.11.2013qsort(list->data, list->nused, sizeof(record), sort_name_des);
эта строка выглядит неправильно. Является ли list-›data массивом вещей или просто одним элементом? - person ryyker   schedule 27.11.2013