Что этот буг когда я программаю по-C using qsort?
У меня бан в английском сайт, поэтому я скажу здесь. Извините мне что я не могу говорить по-русски, а ещё хочу сказать об этом буг кому-то.
Мой код
#include <stdio.h>
#define printDoubleArray(x,l) printf(#x":\n[ ");for(int __i=0;__i<l;__i++) printf("%g, ",x[__i]);puts("]")
int cmp(const void* a,const void* b)
{
double c = *((double*)a);
double d = *((double*)b);
return c>d;
}
int main(int argc,char** argv)
{
double a[10] = { 0,0.9,5.6,2.7,3.6,4.5,5.4,6.3,7.2,8.1 };
qsort(a,10,sizeof(double),cmp);
printDoubleArray(a,10);
pause();
return 0;
}
Буг
a:
[ 0, 0.9, 4.5, 2.7, 3.6, 5.4, 5.6, 6.3, 7.2, 8.1, ]
Нажмите любую клавишу, чтобы продолжить. . .
Что этот буг, и что мне надо делать?
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Ваша функция сравнения возвращает только 0 и 1, а по спецификации требуется возврат отрицательного целого, 0, или положительного целого согласно результату сравнения.
Например, так:
if (c < d)
return -1;
else if (c > d) return 1;
else return 0;