Liste chainée et pointeurs en programmation c
Résolu/Fermé
nabelou1
Messages postés
11
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
5 mai 2008
-
2 janv. 2008 à 23:57
fati - 23 févr. 2008 à 13:50
fati - 23 févr. 2008 à 13:50
A voir également:
- Liste chainée et pointeurs en programmation c
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Application de programmation - Guide
- Gertrude a préparé la liste des affaires à prendre pour l'excursion. juliette a modifié cette liste en utilisant le mode suivi des modifications proposé par le traitement de texte. - Guide
- Liste de diffusion whatsapp - Guide
7 réponses
nabelou1
Messages postés
11
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
5 mai 2008
3
5 janv. 2008 à 12:29
5 janv. 2008 à 12:29
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) ;
}
BloodyAngel
Messages postés
1482
Date d'inscription
mardi 21 juin 2005
Statut
Contributeur
Dernière intervention
21 juin 2018
402
3 janv. 2008 à 00:02
3 janv. 2008 à 00:02
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 ?
Doctor C
Messages postés
627
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
19 février 2016
398
3 janv. 2008 à 00:22
3 janv. 2008 à 00:22
chaine c'est un un tableau de char ( regarde le typedef au début)
Doctor C
Messages postés
627
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
19 février 2016
398
3 janv. 2008 à 00:26
3 janv. 2008 à 00:26
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
nabelou1
Messages postés
11
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
5 mai 2008
3
4 janv. 2008 à 13:36
4 janv. 2008 à 13:36
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
Doctor C
Messages postés
627
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
19 février 2016
398
4 janv. 2008 à 23:11
4 janv. 2008 à 23:11
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
nabelou1
Messages postés
11
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
5 mai 2008
3
6 janv. 2008 à 00:30
6 janv. 2008 à 00:30
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.
Doctor C
Messages postés
627
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
19 février 2016
398
6 janv. 2008 à 04:04
6 janv. 2008 à 04:04
un problème de moins dans le monde!
heureux de t'avoir aidé!
heureux de t'avoir aidé!