Liste chainée et fichier

Fermé
elwess20 Messages postés 26 Date d'inscription samedi 1 janvier 2011 Statut Membre Dernière intervention 15 janvier 2011 - 13 janv. 2011 à 17:10
elwess20 Messages postés 26 Date d'inscription samedi 1 janvier 2011 Statut Membre Dernière intervention 15 janvier 2011 - 13 janv. 2011 à 18:15
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
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:

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
13 janv. 2011 à 18:00
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 !

Nouveau_f->fait = (char*) malloc(BUFSIZ);
strcpy(Nouveau_f->fait,buffer);
0
elwess20 Messages postés 26 Date d'inscription samedi 1 janvier 2011 Statut Membre Dernière intervention 15 janvier 2011
13 janv. 2011 à 18:15
mercii bcpppp,le probleme est resolu.
0