Liste chainée et pointeurs en programmation c
Résolu
nabelou1
Messages postés
11
Statut
Membre
-
fati -
fati -
Bonjour,
j'aimerais qu'on m'aide à resoudre un probleme qui me depasse avec les pointeurs et listes chainées
voici le code
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef char chaine[20];
typedef struct voisin *pvoisin;
typedef struct{
chaine nom ;
int dist;
int typ;
pvoisin suiv;}voisin;
typedef struct noeud *pnoeud;
typedef struct{
chaine ville;
int nb;
int ens;
pvoisin vois;
pnoeud suivant;}noeud;
int cpt1,cpt2,n;
chaine orig,dest;
pnoeud tete,courant;
void datasource(chaine fiche)
{
FILE *f;
pnoeud nod1,nod2; pvoisin vnod1,vnod2;
f=fopen(fiche,"r");
fscanf(f,"%d",&n);fscanf(f,"\n");
for(cpt1=0;cpt1<n;cpt1++)
{
nod2=tete;
nod1=(pnoeud)malloc(sizeof(noeud));
fscanf(f,"%s %d\n",nod1->ville,nod1->nb);
for(cpt2=0;cpt2<nod1->nb;cpt2++)
{
vnod2=nod1->vois;
vnod1=(pvoisin)malloc(sizeof(voisin));
fscanf(f,"%s %d %d",vnod1->nom,vnod1->dist,vnod1->typ);
nod1->vois=vnod1;vnod1->suiv=vnod2;
}fscanf(f,"\n\n");
nod1->suivant=nod2;tete=nod1;
}
printf("data load succefully");
}
main()
{
chaine fichier;
printf("entrez le nom du fichier contenant les données");
scanf("%s\n");
datasource(fichier) ;
}
et j'ai une ceci lors de la compilation
C:\Documents and Settings\nabelou\Bureau\tp3\liste.c: In function `datasource':
34: error: dereferencing pointer to incomplete type
34: error: dereferencing pointer to incomplete type
35: error: dereferencing pointer to incomplete type
:37: error: dereferencing pointer to incomplete type
:39: error: dereferencing pointer to incomplete type
39: error: dereferencing pointer to incomplete type
:39: error: dereferencing pointer to incomplete type
40: error: dereferencing pointer to incomplete type
40: error: dereferencing pointer to incomplete type
42: error: dereferencing pointer to incomplete type
43: error: syntax error before '}' token
merci d'avance
j'aimerais qu'on m'aide à resoudre un probleme qui me depasse avec les pointeurs et listes chainées
voici le code
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef char chaine[20];
typedef struct voisin *pvoisin;
typedef struct{
chaine nom ;
int dist;
int typ;
pvoisin suiv;}voisin;
typedef struct noeud *pnoeud;
typedef struct{
chaine ville;
int nb;
int ens;
pvoisin vois;
pnoeud suivant;}noeud;
int cpt1,cpt2,n;
chaine orig,dest;
pnoeud tete,courant;
void datasource(chaine fiche)
{
FILE *f;
pnoeud nod1,nod2; pvoisin vnod1,vnod2;
f=fopen(fiche,"r");
fscanf(f,"%d",&n);fscanf(f,"\n");
for(cpt1=0;cpt1<n;cpt1++)
{
nod2=tete;
nod1=(pnoeud)malloc(sizeof(noeud));
fscanf(f,"%s %d\n",nod1->ville,nod1->nb);
for(cpt2=0;cpt2<nod1->nb;cpt2++)
{
vnod2=nod1->vois;
vnod1=(pvoisin)malloc(sizeof(voisin));
fscanf(f,"%s %d %d",vnod1->nom,vnod1->dist,vnod1->typ);
nod1->vois=vnod1;vnod1->suiv=vnod2;
}fscanf(f,"\n\n");
nod1->suivant=nod2;tete=nod1;
}
printf("data load succefully");
}
main()
{
chaine fichier;
printf("entrez le nom du fichier contenant les données");
scanf("%s\n");
datasource(fichier) ;
}
et j'ai une ceci lors de la compilation
C:\Documents and Settings\nabelou\Bureau\tp3\liste.c: In function `datasource':
34: error: dereferencing pointer to incomplete type
34: error: dereferencing pointer to incomplete type
35: error: dereferencing pointer to incomplete type
:37: error: dereferencing pointer to incomplete type
:39: error: dereferencing pointer to incomplete type
39: error: dereferencing pointer to incomplete type
:39: error: dereferencing pointer to incomplete type
40: error: dereferencing pointer to incomplete type
40: error: dereferencing pointer to incomplete type
42: error: dereferencing pointer to incomplete type
43: error: syntax error before '}' token
merci d'avance
Configuration: Windows XP Firefox 2.0.0.11
A voir également:
- Liste chainée et pointeurs en programmation c
- Liste déroulante excel - Guide
- Liste code ascii - Guide
- Liste déroulante en cascade - Guide
- Liste des appareils connectés - Guide
- Liste caractères spéciaux word - Guide
7 réponses
t'avais raison je n'ai plus les problemes de dereferencent
ais il e seble qu'il y'a autre cose car le programme s'arrete de lui même quand je tape le nom de mon fichjer.
voici le code
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef char chaine[20];
typedef struct voisin{
chaine nom ;
int dist;
int typ;
struct voisin *suiv;};
typedef voisin *pvoisin;
typedef struct noeud *pnoeud;
typedef struct noeud{
chaine ville;
int nb;
int ens;
pvoisin vois;
pnoeud suivant;};
int cpt1,cpt2,n;
chaine orig,dest;
pnoeud tete,courant;
void datasource(chaine fiche)
{
FILE *f;
pnoeud nod1,nod2; pvoisin vnod1,vnod2;
f=fopen(fiche,"r");
fscanf(f,"%d",&n);fscanf(f,"\n");
for(cpt1=0;cpt1<n;cpt1++)
{
nod2=tete;
nod1=(pnoeud)malloc(sizeof(noeud));
fscanf(f,"%s %d\n",&(nod1->ville),&(nod1->nb));
for(cpt2=0;cpt2<nod1->nb;cpt2++)
{
vnod2=nod1->vois;
vnod1=(pvoisin)malloc(sizeof(voisin));
fscanf(f,"%s %d %d",&(vnod1->nom),&(vnod1->dist),&(vnod1->typ));
nod1->vois=vnod1;vnod1->suiv=vnod2;
}fscanf(f,"\n\n");
nod1->suivant=nod2;tete=nod1;
}
printf("data load succefully");
}
main()
{
chaine fichier;
printf("entrez le nom du fichier contenant les données\n");
scanf("%s",&fichier);
datasource(fichier) ;
}
ais il e seble qu'il y'a autre cose car le programme s'arrete de lui même quand je tape le nom de mon fichjer.
voici le code
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef char chaine[20];
typedef struct voisin{
chaine nom ;
int dist;
int typ;
struct voisin *suiv;};
typedef voisin *pvoisin;
typedef struct noeud *pnoeud;
typedef struct noeud{
chaine ville;
int nb;
int ens;
pvoisin vois;
pnoeud suivant;};
int cpt1,cpt2,n;
chaine orig,dest;
pnoeud tete,courant;
void datasource(chaine fiche)
{
FILE *f;
pnoeud nod1,nod2; pvoisin vnod1,vnod2;
f=fopen(fiche,"r");
fscanf(f,"%d",&n);fscanf(f,"\n");
for(cpt1=0;cpt1<n;cpt1++)
{
nod2=tete;
nod1=(pnoeud)malloc(sizeof(noeud));
fscanf(f,"%s %d\n",&(nod1->ville),&(nod1->nb));
for(cpt2=0;cpt2<nod1->nb;cpt2++)
{
vnod2=nod1->vois;
vnod1=(pvoisin)malloc(sizeof(voisin));
fscanf(f,"%s %d %d",&(vnod1->nom),&(vnod1->dist),&(vnod1->typ));
nod1->vois=vnod1;vnod1->suiv=vnod2;
}fscanf(f,"\n\n");
nod1->suivant=nod2;tete=nod1;
}
printf("data load succefully");
}
main()
{
chaine fichier;
printf("entrez le nom du fichier contenant les données\n");
scanf("%s",&fichier);
datasource(fichier) ;
}
et pour ton problème... peut-être que je suis rouillé en C mais, je crois bien que dans tes fscanf (pas tous...), tu fais une petite erreur.
i.e.:
fscanf(f,"%s %d\n",nod1->ville,nod1->nb);
tu devrais plutôt placer tes valeurs dans l'adresse ( &(nod1->nb) ) et non dans la variable elle-même.
plutôt comme ça:
fscanf(f,"%s %d\n",&(nod1->ville), &(nod1->nb));
(pour le ville, je suis pas certains que ce soit nécessaire étant donné qu'il s'agit d'une chaîne de caractères mais, pour le nb, ça me parait être la cause de ton erreur)
s'il s'agit de ton erreur, tu l'as répétée dans quelques autres fscanf
i.e.:
fscanf(f,"%s %d\n",nod1->ville,nod1->nb);
tu devrais plutôt placer tes valeurs dans l'adresse ( &(nod1->nb) ) et non dans la variable elle-même.
plutôt comme ça:
fscanf(f,"%s %d\n",&(nod1->ville), &(nod1->nb));
(pour le ville, je suis pas certains que ce soit nécessaire étant donné qu'il s'agit d'une chaîne de caractères mais, pour le nb, ça me parait être la cause de ton erreur)
s'il s'agit de ton erreur, tu l'as répétée dans quelques autres fscanf
J'espère ne pas me tromper dans ce que je vais dire par la suite:
oui, nod1 est un pointeur, mais les propriétés de ta structure ( "pointées" par les -> ) ne sont pas des pointeurs (pour la majorité). Ce sont des variables.
au pire, tu pourrais simplement l'essayer et me dire le résultat!
il est possible que je me trompe...
tiens-moi au courant!
oui, nod1 est un pointeur, mais les propriétés de ta structure ( "pointées" par les -> ) ne sont pas des pointeurs (pour la majorité). Ce sont des variables.
au pire, tu pourrais simplement l'essayer et me dire le résultat!
il est possible que je me trompe...
tiens-moi au courant!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
j'ai fini par resoudre le probleme en faisant le dereferencement avec & comme tu l'avais dit Doctor c
je vous remercie pour le coup de main.
je vous remercie pour le coup de main.