微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用qsort对C中的结构数组进行排序

如何解决使用qsort对C中的结构数组进行排序

我尝试按单价对一系列产品进行排序,但结果不起作用。

int i = 6;
double d = i / 2D; // This will divide bei double.
System.out.println(d); // This will print a double. = 3D

解决方法

comparator已损坏。它减去两个double值并返回一个int。减法结果中的任何分数都将丢失,因此相隔少于一个单位的数字将被视为相等。

修复该错误,以在项目不同时返回非零数字。

,

从返回double类型值的函数返回int值,将导致doubleint的隐式转换,小数部分将从返回的值中丢弃值。

如果您使用的是gcc编译器,请尝试使用-Wconversion选项进行编译,编译器会发出警告:

 warning: implicit conversion turns floating-point number into integer: 'double' to 'int' [-Wfloat-conversion]
    return (*(Product*) b).unitPrice - (*(Product*) a).unitPrice;
    ~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.

您可以这样做:

int comparator(const void * a,const void * b) {
    double first = (*(Product*) a).unitPrice;
    double second = (*(Product*) b).unitPrice;

    if (second > first) {
        return 1;
    } else if (second < first) {
        return -1;
    }
    return 0; // second == first
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。