Liste chainée et pointeurs en programmation c
Résolu
nabelou1
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
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
A voir également:
- Liste chainée et pointeurs en programmation c
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Liste code ascii - Guide
- Application de programmation - Guide
- Site dangereux liste - 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) ;
}
Bin déjà je m'arrêterais à deux choses :
scanf ça pue... je serais toi j'utiliserait gets()
Deuxièmement, tu utilises "chaine"... c'est quoi exactement ?
scanf ça pue... je serais toi j'utiliserait gets()
Deuxièmement, tu utilises "chaine"... c'est quoi exactement ?
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
nod1 est deja une adresse
c'est un pointer et je crois que & n'est pas necessaire avec les pointeur
c'est un pointer et je crois que & n'est pas necessaire avec les pointeur
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.