Comment écrire une fonction de comparaison pour qsort de stdlib?

J'ai une structure:

struct pkt_
{
  double x;
  double y;
  double alfa;
  double r_kw;
};

typedef struct pkt_ pkt;

Un tableau de ces structures:

pkt *tab_pkt;

tab_pkt = malloc(ilosc_pkt * sizeof(pkt));

Ce que je veux faire est de trier tab_pkt par tab_pkt.alfa et tab_pkt.r:

qsort(tab_pkt, ilosc_pkt, sizeof(pkt), porownaj);

Où porownaj est une fonction de comparaison, mais comment l'écrire? Voici mon "sketch" de celui-ci:

int porownaj(const void *pkt_a, const void *pkt_b)
{
  if (pkt_a.alfa > pkt_b.alfa && pkt_a.r_kw > pkt_b.r_kw) return 1;
  if (pkt_a.alfa == pkt_b.alfa && pkt_a.r_kw == pkt_b.r_kw) return 0;
  if (pkt_a.alfa < pkt_b.alfa && pkt_a.r_kw < pkt_b.r_kw) return -1;
}
j'ai ajouté le qsort tag, étant donné que ce problème est sur le qsort fonction de prédicat. je pense que d'autres ppl avec qsort va avoir des problèmes avec elle maintenant et puis.
Par la même, la même fonction peut être utilisée avec brecherche(); en effet, il est généralement une erreur si vous n'utilisez pas le même comparateur de fonction pour les deux qsort() d'un tableau et brecherche() du même tableau - en supposant que vous utilisez les deux fonctions.

OriginalL'auteur diminish | 2008-11-29