如何解决使用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
值,将导致double
到int
的隐式转换,小数部分将从返回的值中丢弃值。
如果您使用的是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 举报,一经查实,本站将立刻删除。