Probleme avec la fonction compare et qsort
Résolu/Fermé
chrislains
Messages postés
4
Date d'inscription
samedi 29 décembre 2012
Statut
Membre
Dernière intervention
10 mai 2013
-
10 mai 2013 à 16:51
chrislains Messages postés 4 Date d'inscription samedi 29 décembre 2012 Statut Membre Dernière intervention 10 mai 2013 - 10 mai 2013 à 18:38
chrislains Messages postés 4 Date d'inscription samedi 29 décembre 2012 Statut Membre Dernière intervention 10 mai 2013 - 10 mai 2013 à 18:38
A voir également:
- Probleme avec la fonction compare et qsort
- Fonction si et - Guide
- Fonction moyenne excel - Guide
- Beyond compare gratuit - Télécharger - Gestion de fichiers
- Fonction somme excel - Guide
- Excel remplir automatiquement une cellule en fonction d'une autre ✓ - Forum Excel
2 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
10 mai 2013 à 17:31
10 mai 2013 à 17:31
Bonjour,
Deux erreurs :
struct releve const *pa = a;
struct releve const *pb = b;
struct releve n'existe pas. Il s'agit du type releve (cf. ton typedef).
return strcmp (pa->tx, pb->tx);
pa->tx est de type float (et non de type char*). Tu ne peux donc pas utiliser strcmp(). Un simple : return pa->tx - pb->tx; fera l'affaire.
D'ailleurs, pour bien faire, il faudrait même tenir compte d'une tolérance epsilonienne : si la différence entre pa->tx et pb-> tx est suffisamment petite alors on renvoie 0.
Cdlt,
Deux erreurs :
struct releve const *pa = a;
struct releve const *pb = b;
struct releve n'existe pas. Il s'agit du type releve (cf. ton typedef).
return strcmp (pa->tx, pb->tx);
pa->tx est de type float (et non de type char*). Tu ne peux donc pas utiliser strcmp(). Un simple : return pa->tx - pb->tx; fera l'affaire.
D'ailleurs, pour bien faire, il faudrait même tenir compte d'une tolérance epsilonienne : si la différence entre pa->tx et pb-> tx est suffisamment petite alors on renvoie 0.
Cdlt,
chrislains
Messages postés
4
Date d'inscription
samedi 29 décembre 2012
Statut
Membre
Dernière intervention
10 mai 2013
10 mai 2013 à 18:10
10 mai 2013 à 18:10
merci fiddy pour ta reponse
j'ai modifier ma fonction compare
int compare (releve *a , releve *b) {
releve *pa = a;
releve *pb = b;
return pa->tx - pb->tx;
}
mais le compilateur trouve une erreur au niveau de la fonction qsort
qsort(t, 366, sizeof(releve), compare);
voici l'erreur " tp6.c:127:4: attention : passing argument 4 of `qsort' from incompatible pointer type [enabled by default] "
pouvez me dire ou est ma betise svp??
j'ai modifier ma fonction compare
int compare (releve *a , releve *b) {
releve *pa = a;
releve *pb = b;
return pa->tx - pb->tx;
}
mais le compilateur trouve une erreur au niveau de la fonction qsort
qsort(t, 366, sizeof(releve), compare);
voici l'erreur " tp6.c:127:4: attention : passing argument 4 of `qsort' from incompatible pointer type [enabled by default] "
pouvez me dire ou est ma betise svp??
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
10 mai 2013 à 18:19
10 mai 2013 à 18:19
int compare (releve *a , releve *b)
Pourquoi, avoir changé le prototype de la fonction ? C'était mieux avec const void* ;-)
Pourquoi, avoir changé le prototype de la fonction ? C'était mieux avec const void* ;-)
chrislains
Messages postés
4
Date d'inscription
samedi 29 décembre 2012
Statut
Membre
Dernière intervention
10 mai 2013
10 mai 2013 à 18:33
10 mai 2013 à 18:33
int compare (const void *a , const void *b) {
releve *pa = a;
releve *pb = b;
return (pa->tx > pb->tx) - (pa->tx < pb->tx);
}
la j'ai modifier mais sa me met ce warning " tp6.c:104:14: attention : initialization discards `const' qualifier from pointer target type [enabled by default] " a ce niveau
releve *pa = a;
releve *pb = b;
j'arrive pas a comprendre :(
releve *pa = a;
releve *pb = b;
return (pa->tx > pb->tx) - (pa->tx < pb->tx);
}
la j'ai modifier mais sa me met ce warning " tp6.c:104:14: attention : initialization discards `const' qualifier from pointer target type [enabled by default] " a ce niveau
releve *pa = a;
releve *pb = b;
j'arrive pas a comprendre :(
chrislains
Messages postés
4
Date d'inscription
samedi 29 décembre 2012
Statut
Membre
Dernière intervention
10 mai 2013
10 mai 2013 à 18:38
10 mai 2013 à 18:38
j'ai trouver mon erreur
il fallait juste ecrire releve const *pa =a
pareil pour b
merci fiddy pour tes reponses
il fallait juste ecrire releve const *pa =a
pareil pour b
merci fiddy pour tes reponses