【发布时间】:2018-08-17 09:26:23
【问题描述】:
我有一个如下所示的temp2.dat 文件:
0.060493 1 0.5 1
1.596961 0 0.1 2
0.87758 1 0.3 1.5
0.165453 1 0 3
0.07085 1 0.3 4
0.125379 1 0.2 3
0.454202 1 0.2 2
0.373227 1 0.3 1
0.131486 1 0.3 3
0.867477 0 0.5 4
0.122609 0 0.8 9
现在我想在C 中编写函数,以升序对这 4 列进行排序,但仅基于第一列的值。我尝试修改以下代码,但失败了:
struct data_t
{
double x;
int y;
double z;
double k;
};
int compare(const void *a, const void *b)
{
const struct data_t *m = a;
const struct data_t *n = b;
if(m->x == n->x)
return m->y > n->y;
return m->z > n->z;
return m->k > n->k;
return m->x > n->x;
}
有人可以帮我做这件事吗?预期结果应如下所示:
0.060493 1 0.5 1
0.07085 1 0.3 4
0.122609 0 0.8 9
0.125379 1 0.2 3
0.131486 1 0.3 3
................
0.87758 1 0.3 1.5
1.596961 0 0.1 2
【问题讨论】:
-
您的
compare功能很奇怪。请查找一些可能是qsort的示例,并注意测试浮点值是否相等。请发布显示问题的Minimal, Complete, and Verifiable example。 -
return m->k > n->k;和return m->x > n->x;是没用的,它们永远无法到达,你只能从函数中返回 1 个对象。我强烈建议在您的if语句中添加一些括号{ ... },以明确您想要的内容,或者至少更改缩进。你现在拥有的是误导性的。 -
@yano:非常感谢。下次我会注意这一点。