Langage c débutant nombreuses erreurs.

Fermé
allezlolo - 14 mai 2008 à 20:15
 juju - 15 mai 2008 à 17:20
Bonsoir à tous,

Je viens de faire un code (enfin d'essayer) me permettant de trier les valeurs d'un tableau d'éléments de type qcq. La fonction doit recevoir en paramètre un pointeur sur la fonction qui compare deux éléments e1 et e2 et qui retourne -1,0 ou 1 selon que e1 est inférieur égal ou supérieur à e2.

Voici mon code me permettant de faire un test avec un tableau de double :

static int compare_double (void const *a, void const *b) {
double const *pa = a;
double const *pb = b;
int result;
if (pa < pb) {
result = -1;
} else if (pa = pb) {
result = 0;
} else {
result = 1;
}

return result;
}



tri_quest4 (void *tab,int (*cmp_element)(void const*e1, void const *e2),int nombreEl) {
int j=0;
int i=0;
void* aux;

for (i; i < nombreEl; i++) {
for (j = i + 1; j < (nombreEl); j++){
if (cmp_element(tab[i],tab[j])==1) {
aux = tab[i];
tab[i] = tab[j];
tab[j] = aux;
}
}
}
}

int main() {
double* tab;
tab = malloc (double*) (sizeof(double*)*4);
tab[0] = 1.5;
tab[1] = 0.5;
tab[2] = 2.5;
tab[3] = 2.0;
tri_quest4(tab, &compare_double,4);
}


Et voici les erreurs de compilation :

tp8.c: In function «tri_quest4":
tp8.c:68: attention : dereferencing «void *" pointer
tp8.c:68: attention : dereferencing «void *" pointer
tp8.c:68: erreur: utilisation invalide d'expression void
tp8.c:68: erreur: utilisation invalide d'expression void
tp8.c:69: attention : dereferencing «void *" pointer
tp8.c:69: erreur: valeur void n'a pas été ignorée comme elle aurait dû l'être
tp8.c:70: attention : dereferencing «void *" pointer
tp8.c:70: attention : dereferencing «void *" pointer
tp8.c:70: erreur: utilisation invalide d'expression void
tp8.c:71: attention : dereferencing «void *" pointer
tp8.c:71: erreur: utilisation invalide d'expression void
tp8.c: In function «main":
tp8.c:79: erreur: expected expression before «double"
tp8.c:79: erreur: called object «malloc(<erroneous-expression>)" is not a function
tp8.c:84: erreur: «compare_int" undeclared (first use in this function)
tp8.c:84: erreur: (Each undeclared identifier is reported only once
tp8.c:84: erreur: for each function it appears in.)


EN vous remerciant à l'avance pour l'aide que vous pouvez m'apporter

5 réponses

ibtor Messages postés 2360 Date d'inscription samedi 29 mars 2008 Statut Membre Dernière intervention 22 décembre 2009 283
14 mai 2008 à 20:23
essaye void *aux;
à la place de void* aux;

idem dans ton main avec double
1
j'ai essayé, ça ne change rien
0
j'ai un peu moins d'erreurs...

tp8.c: In function «tri_quest4":
tp8.c:68: attention : dereferencing «void *" pointer
tp8.c:68: attention : dereferencing «void *" pointer
tp8.c:68: erreur: utilisation invalide d'expression void
tp8.c:68: erreur: utilisation invalide d'expression void
tp8.c:69: attention : dereferencing «void *" pointer
tp8.c:69: erreur: valeur void n'a pas été ignorée comme elle aurait dû l'être
tp8.c:70: attention : dereferencing «void *" pointer
tp8.c:70: attention : dereferencing «void *" pointer
tp8.c:70: erreur: utilisation invalide d'expression void
tp8.c:71: attention : dereferencing «void *" pointer
tp8.c:71: erreur: utilisation invalide d'expression void


cela correspond aux lignes :


for (i; i < nombreEl; i++) {
for (j = i + 1; j < (nombreEl); j++){
if (cmp_element(tab[i],tab[j])==1) {
aux = tab[i];
tab[i] = tab[j];
tab[j] = aux;
}
}
}
0
Bonjour,
J'ai un problème : lorsque j'execute mon programme, il me dit que 100 divisé par n'importe quoi fait 0. J'ai besoin d'aide s'il vous plait. Voici mon programme :
#include "stdio.h"

int saisienf()
{
int n;
printf("Entrez le pas ===>") ;
scanf("%d",n) ;
return n;
}
int main ()
{
int n;
n=saisienf();
float L;
float h;

L=100.;
h=L/n;
printf("%d \n",h);

return 0;
}
Quelle que soit la valeur de n que je rentre, il me sort 0. Je ne comprends pas.
Merci d'avance,
Justine
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
@juju : Ca fait longtemps que j'ai plus touché de C, mais il me semble que tu as oublié le "&" dans "scanf("%d",&n) ;"

Tu dois passer l'adresse de la variable que tu veux remplir, c'est important. Dans ton cas, j'imagine qu'au final 'n' valait un numéro énorme, donc 100 / TRES_GRAND, arrondi en entier donne '0'
0
oui, mais meme avec le & il me met toujours 0. merci quand meme pour ton aide


#include "stdio.h"


int saisienf()
{
int n;
printf("Entrez le pas ===>") ;
scanf("%d",&n) ;
return n;
}
int main ()
{
int n;
n=saisienf();
float L;
float h;
L=100.;

h=L/n;
printf("%d \n",h);

return 0;
}
0