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

achmer 22 Messages postés mardi 3 mars 2009Date d'inscription 9 juillet 2012 Dernière intervention - 21 mars 2010 à 23:15 - Dernière réponse : achmer 22 Messages postés mardi 3 mars 2009Date d'inscription 9 juillet 2012 Dernière intervention
- 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
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
tpoinsot 345 Messages postés mardi 1 juin 2004Date d'inscription 17 octobre 2014 Dernière intervention - 22 mars 2010 à 09:56
3
Merci
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 )

Merci tpoinsot 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de tpoinsot
achmer 22 Messages postés mardi 3 mars 2009Date d'inscription 9 juillet 2012 Dernière intervention - 22 mars 2010 à 14:18
0
Merci
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
Commenter la réponse de achmer

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.