Liste chainée et fichier
elwess20
Messages postés
28
Statut
Membre
-
elwess20 Messages postés 28 Statut Membre -
elwess20 Messages postés 28 Statut Membre -
Bonjour mes amis,
je veut faire un programme qui permet d'inserer chaque ligne de fichier dans un liste chainé,mais malgré qu'il n ya pas de faute,il m'affiche seulement le dernier ligne ,j'ai pas pu trouver l'erreur,svp,j'ai besioin de votre aide pour resoudre ce probleme.
donnee.txt
voila mon programme
pour l'affichage il m'affiche
mercii
je veut faire un programme qui permet d'inserer chaque ligne de fichier dans un liste chainé,mais malgré qu'il n ya pas de faute,il m'affiche seulement le dernier ligne ,j'ai pas pu trouver l'erreur,svp,j'ai besioin de votre aide pour resoudre ce probleme.
donnee.txt
education liberte société
voila mon programme
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Liste_fait *Liste_fait;
struct Liste_fait {
char *fait;
struct Liste_fait *psuivant_f;
};
int main(void){
FILE *fp;
char buffer[BUFSIZ];
struct Liste_fait *f = NULL;
struct Liste_fait *Nouveau_f;
fp=fopen("fait.txt","r");
if(fp==NULL)
{
fputs("erreur à l'ouverture du fichier\n",stderr);
return EXIT_FAILURE;
}
while(fgets(buffer, sizeof(buffer),fp)!=NULL)
{
char *c=strchr(buffer,'\n');
if(*c!=0)
{
*c='\0';
}
Nouveau_f=malloc(sizeof (Liste_fait));
if(Nouveau_f !=NULL)
{
Nouveau_f->fait=buffer;
Nouveau_f->psuivant_f = NULL;
if(f ==NULL)
{
f=Nouveau_f;
}
else
{
struct Liste_fait *par_f=f;
while(par_f->psuivant_f !=NULL)
{
par_f=par_f->psuivant_f;
}
par_f->psuivant_f=Nouveau_f;
}
}
}
struct Liste_fait *par2_f=f;
while(par2_f!=NULL){
printf("%s\n",par2_f->fait);
par2_f=par2_f->psuivant_f;}
fclose(fp);
return 0;
}
pour l'affichage il m'affiche
société société société
mercii
A voir également:
- Liste chainée et fichier
- Liste déroulante excel - Guide
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
1 réponse
J'ai du modifier ton programme pour qu'il marche
1) J'ai rajouté un cast (struct Liste_fait *) devant le malloc
2) J'ai remplacé if (*c!=0) par if(c!=NULL)
Remarque :
Il serait surement plus simple de faire un typedef plutôt que de toujours te promener avec cette struct Liste_fait*
De plus, ton c, tu ne t'en sers jamais !
Sinon concernant ton problème, tu fais Nouveau_f->fait=buffer;
Or si buffer change de valeur, son pointeur lui ne change pas !
Il faut utiliser strcpy pour modifier la valeur de Nouveau_f->fait, après bien sûr lui avoir alloué de la mémoire !
1) J'ai rajouté un cast (struct Liste_fait *) devant le malloc
2) J'ai remplacé if (*c!=0) par if(c!=NULL)
Remarque :
Il serait surement plus simple de faire un typedef plutôt que de toujours te promener avec cette struct Liste_fait*
De plus, ton c, tu ne t'en sers jamais !
Sinon concernant ton problème, tu fais Nouveau_f->fait=buffer;
Or si buffer change de valeur, son pointeur lui ne change pas !
Il faut utiliser strcpy pour modifier la valeur de Nouveau_f->fait, après bien sûr lui avoir alloué de la mémoire !
Nouveau_f->fait = (char*) malloc(BUFSIZ); strcpy(Nouveau_f->fait,buffer);
elwess20
Messages postés
28
Statut
Membre
mercii bcpppp,le probleme est resolu.