Я создаю код C для сортировки с помощью qsort(). Мне нужно получить массив от пользователя, и после этого мне нужно получить от пользователя для печати этого массива в порядке возрастания и d, если я хочу напечатать его в порядке убывания. Проблема в том, что для этого мне нужно использовать указатели на функции. Я попытался использовать массив указателей функций, но проблема в том, что пользователю нужно ввести два символа.C код для использования qsort() для сортировки в порядке, в котором пользователь хочет использовать указатели на функции
#include <stdio.h>
#include <stdlib.h>
int a(const void *va , const void * vb)
{
const int * a = (const int *) va ;
const int * b = (const int *) vb ;
if (* a < *b) return -1;
else if (* a > * b) return 1;
else return 0;
}
int d(const void *va , const void * vb)
{
const int * a = (const int *) va ;
const int * b = (const int *) vb ;
if (* a < *b) return 1;
else if (* a > * b) return -1;
else return 0;
}
int main()
{
int *arr;
int n, i;
char c;
scanf("%d", &n);
arr=(int*)malloc(sizeof(int)*n);
for(i=0;i<n;i++)
{
scanf("%d", &arr[i]);
}
while(1)
{
scanf("%c", &c);
getchar();
if(c=='e')
break;
qsort (arr , n , sizeof(arr[0]) , d);
}
for(i=0;i<n;i++)
{
printf("%d", arr[i]);
}
return 0;
}
Есть много решений в Интернете, поиск – Jadeye
Примечания: общая идиому для 'а()' -> возвращения '(* а > * b) - (* a <* b); ' – chux
C не требует всех этих приводов. Более того, они могут скрывать ошибки. Просто удалите их. – alk