【发布时间】:2018-04-25 18:15:59
【问题描述】:
相关代码(索引为数组的大小):
typedef struct elemento {
unsigned long linha;
unsigned long coluna;
double valor;
} elemento;
elemento Representados[MAXN];
qsort(Representados, index, sizeof(Representados[0]), lcomparator);
int lcomparator(const void *el1, const void *el2) {
int l1 = ((elemento *)el1)->linha;
int l2 = ((elemento *)el2)->linha;
int c1 = ((elemento *)el1)->coluna;
int c2 = ((elemento *)el2)->coluna;
if (l1 < l2) {
return -1;
}
else if (l1 == l2) {
if (c1 < c2) {
return -1;
}
else if (c1 == c2) {
return 0;
}
else if (c2 > c1) {
return 1;
}
}
else {
return 1;
}
}
gcc 还为 lcomparator 打印出“控制到达结束”警告,但我看不出我的函数怎么可能不返回任何内容。
【问题讨论】:
-
最里面的
if没有“默认”else大小写,因此会出现警告。 -
无关,它完全不会打扰你吗,你应该收到的那些编译器警告,尖叫着从
unsigned long到@987654326的转换@ 可能会丢失精度? -
您好,感谢您的回复。我已经删除了最里面的 if 的 else,但是 qsort 仍然不能正确排序。
-
请说明如何使用Minimal, Complete, and Verifiable example 调用
qsort。 -
您将从这篇文章中了解为什么人们建议您发布最小、完整和可验证的示例。你表现得好像你在法庭上为你的案子辩护。你谈论探针,但你根本没有展示它们。你说
index被赋予了正确的值。我现在不知道你是否已经分配、初始化或#defined 它,以及如何,但你是对的......继续这样,你会感到绝望,因为你告诉我们绝对关于您的代码的真相......并且不要对错误一无所知。你看不到它。所以我们没有。
标签: c gcc comparator qsort