【发布时间】:2017-04-02 01:37:14
【问题描述】:
我有一个结构
struct info {
char firstName[100];
char lastName[100];
char companyName[100];
char email[100];
unsigned long phoneNumber;
};
存储在文件 compareElements.h 中
我将一组值读入名为 bptr 的动态分配的结构数组中。
我的 comparePtr 指向这个函数。
#include <string.h>
#include "compareElements.h"
int compareNameAscending (const void *a, const void *b) {
struct info *part1 = (struct info *) a;
struct info *part2 = (struct info *) b;
if(part1 -> lastName[0] != '\0' && part2 -> lastName[0] != '\0') {
return (strcmp(part1 -> lastName , part2 -> lastName));
}
if (part1 -> lastName[0] == '\0' && part2 -> lastName[0] != '\0') {
return (strcmp(part1 -> companyName , part2 -> lastName));
}
if (part1 -> lastName[0] != '\0' && part2 -> lastName[0] == '\0') {
return (strcmp(part1 -> lastName, part2 -> companyName));
}
if (part1 -> lastName[0] == '\0' && part2 -> lastName[0] == '\0') {
return (strcmp(part1 -> companyName, part2 -> companyName));
}
}
在我的主要功能中
comparePtr = &compareNameAscending
问题在于,并非所有结构都需要 lastName 和 companyName 两者中的一个。所以我想按姓氏排序,如果他们没有姓氏,我会按公司名称排序。问题是我的 qsort 调用实际上并没有改变它只是吐出原始结构的顺序。 这是 qsort 调用。
qsort(bptr, i, sizeof(struct info), comparePtr);
【问题讨论】:
-
显示初始化 comparePtr 的调用。另外,您是否进入调试模式并确保实际调用了您的比较函数?
-
@Tarik 我把它放在那里
-
你能把代码减少到最少(删除多余的字段和空行),并展示一个完整的排序失败的例子吗?
-
问题中的代码根本没有问题。您的错误必须在其他地方。