Chargement d'une liste chainée à partir d'un fichier binaire qui contient des st

Résolu
achmer Messages postés 22 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 9 juillet 2012 - 21 mars 2010 à 23:15
achmer Messages postés 22 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 9 juillet 2012 - 22 mars 2010 à 14:18
bonjours à tous...

j'ai un petit problème au niveau de la récupération des structures (patient) enregistrées dans un fichier bonaire ,pour les charger ensuite dans une liste chainée..
En fait avec ce code ("ça passe, mais")je n'arrive à récupérer que la première structure (le premier patient) qui se trouve dans le fichier...

voilà le code de ma fonction qui fait ce chargement à partir du fichier vers la nouvelle liste chainée créée :

void charger(liste*l)
{
initialiser(l);
FILE *Fin;

Fin=fopen("fiches.txt","rb");
if(Fin==NULL)
{
printf("\n\n\n\n\n\t\timpossible d'ouvrir le fichier en lecture\n ");
getch();
return;
}

while(!feof(Fin))
{
patient *p=(patient*)malloc(sizeof(patient));
fread(p,sizeof(*p),1,Fin);
insererFin(l,*p);
}
fclose(Fin);
}


et voilà le code des deux fonctions appelées : initialiser et insererFin :

void initialiser(liste *l)
{
l->tete=NULL;
}


void insererFin(liste *l,patient p)
{ cellule* cour=l->tete;

//preparer la nouvelle liste
cellule* nouv=(cellule*)malloc(sizeof(cellule));
nouv->info=p;
nouv->suivant=NULL;

//rattacher la nouvelle cellule
if(l->tete==NULL)
{ l->tete=nouv;
}
else
{ while(cour->suivant!=NULL)
{ cour=cour->suivant;
cour->suivant=nouv;
}
}
}

Merci pour votre attention

2 réponses

tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
22 mars 2010 à 09:56
Bonjour,
utilise les balises de code, c'est mieux pour te lire.

A la fin :
while(cour->suivant!=NULL) 
{ cour=cour->suivant; 
cour->suivant=nouv; 
} 


je suppose que tu voulais dire
while ( cour->suivant != NULL ) 
{
  cour = cour->suivant; 
} 
cour->suivant = nouv; 

( position de { )

Je n'ai pas plus regardé, mais pourquoi n'insères-tu pas chaque nouvel élément en tête de liste, tu éviterais le while ( -> suivant )
3
achmer Messages postés 22 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 9 juillet 2012
22 mars 2010 à 14:18
Merci beaucoup pour votre aide..

c'était ça l'erreur,j'ai pas bien fait attention ... j'ai encore rectifié un peu la lecture à partir du fichier et tout marche bien maintenant..

Merci encore pour votre attention et pour répondre à votre question : les structures de patient enregistrées dans mon fichier sont déjà triées selon l'ordre alphabétique de leurs noms,et je voulais que la liste obtenue soit triée aussi en gardant cet ordre par ce que j'en ai besoin ensuite dans mon application.

Merci,et bonne journée
0
Rejoignez-nous