Это код, он сортирует данные крикетиров от avg работает. qsort
функция показывает ошибку:qsort дает [Ошибка]: неверное преобразование из `int (*) (cricketer *, cricketer *) 'в` int (*) (const void *, const void *)'
[Error] C:\Users\Encoder\Documents\C-Free\Temp\Untitled3.cpp:29: error: invalid conversion from
int (*)(cricketer*, cricketer*)
toint (*)(const void*, const void*)
[Error] C:\Users\Encoder\Documents\C-Free\Temp\Untitled3.cpp:29: error: initializing argument 4 of `void qsort(void*, size_t, size_t, int ()(const void, const void*))'
включает
#include<stdlib.h>
struct cricketer //structure for details of cricketer
{
int avg_run;
char name[20];
int age;
int match_no;
} c[4];
int sort(struct cricketer *a, struct cricketer *b); //pre-defining sort function
int main() //main function
{
int i, s;
for (i = 0; i < 3; i++) //enumerating structure records.
{
printf("enter the name of cricketer ");
fflush(stdin);
gets(c[i].name);
printf("enter his age,his no of matches and total average runs ");
scanf("%d%d%d",&c[i].age, &c[i].match_no, &c[i].avg_run);
}
printf("records before sorting");
for (i = 0; i < 3; i++)
{
printf("\n\nname ");
puts(c[i].name);
printf("age %d\nno of matches %d\naverage runs %d\n",c[i].age, c[i].match_no, c[i].avg_run);
}
qsort(c, 3, sizeof(c[0]), sort); //sorting using qsort
printf("\nrecords after sorting");
for (i = 0; i < 3; i++)
{
printf("\n\nname ");
puts(c[i].name);
printf("age %d\nno of matches %d\naverage runs %d\n",c[i].age, c[i].match_no, c[i].avg_run);
}
}
int sort(struct cricketer *a, struct cricketer *b) //sort function definition
{
if (a->avg_run == b->avg_run)
return 0;
else
if (a->avg_run > b->avg_run)
return 1;
else
return -1;
}
В идеале вы хотите сохранить классификатор 'const' для этих указателей. –
@IanAbbott хорошая точка –