Rechercher : dans
Par :

Langage c débutant nombreuses erreurs.

Dernière réponse le 15 mai 2008 à 17:20:52 allezlolo, le 14 mai 2008 à 20:15:37 
 Signaler ce message aux modérateurs

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

Configuration: Linux
Firefox 2.0.0.6

Meilleures réponses pour « langage c débutant nombreuses erreurs. » dans :
[Langage C] C/C++ Erreur de segmentation VoirQu'est ce qu'une erreur de segmentation Vous êtes en train de développer une application sous Linux en C/C++. Tout va bien, ça compile, les oiseaux chantent. Donc vous lancez votre application pour la tester. Et vous obtenez l'un de ces deux...
Introduction au langage C VoirPetite histoire du C Le langage C a été mis au point par D.Ritchie et B.W.Kernighan au début des années 70. Leur but était de permettre de développer un langage qui permettrait d'obtenir un système d'exploitation de type UNIX portable. D.Ritchie...
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...
Langage C - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C, une chaîne...

1

ibtor, le 14 mai 2008 à 20:23:03
  • +1

Essaye void *aux;
à la place de void* aux;

idem dans ton main avec double Un proverbe chinois dit :
quand on a rien à dire, on sort un proverbe chinois !

Répondre à ibtor

2

allezlolo, le 14 mai 2008 à 20:32:35

J'ai essayé, ça ne change rien

Répondre à allezlolo

3

allezlolo, le 14 mai 2008 à 20:49:52

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;
}
}
}

Répondre à allezlolo

4

juju, le 15 mai 2008 à 16:30:15

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

Répondre à juju

5

Pumbaa, le 15 mai 2008 à 16:40:45

@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'

Répondre à Pumbaa

6

 juju, le 15 mai 2008 à 17:20:52

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;
}

Répondre à juju