【发布时间】:2013-11-27 19:37:44
【问题描述】:
我正在尝试使用 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()函数的输出,这将使您在需要制作模组的道路上走得更远,并解决这个问题... -
qsort(list->data, list->nused, sizeof(record), sort_name_des);这行看起来不对。 list->data 是一系列事物,还是只是一个项目?