Tu initialises pas ton pointeur suivant correctement...
Déjà, 
	
	 fread(&suivant->pers, sizeof(carnet), 1, pf);
 devrait être
	
	 fread(&suivant->pers, sizeof(suivant->pers), 1, pf);
 Le problème, c'est que tu ne mets pas systèmatiquement le pointeur à jour lorsque tu le lis ton fichier, une meilleure solution est de faire:
	
	1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
   |  
liste lireficher()
{
liste car=NULL;
liste temp, suivant;
FILE *pf;
 
  pf=fopen("carnet.dat", "r");
 
  if(pf != NULL)
    {
      //On lit le premier élément, on suppose que le fichier a au moins un élément
      car = (liste) malloc(sizeof(carnet));
      //On test toujours après un malloc
      if(car == NULL)
          return NULL;
 
      //C'est toujours mieux de tester le retour des fonctions...
      if(fread(&car->pers, sizeof(car->pers), 1, pf) != sizeof(car->pers))
            {
            free(car);
            return NULL;
            }
 
      car->suivant = NULL;
      temp=car;
 
      while(!feof(pf))
     {
      //A titre d'exercice, je laisse le test du malloc et le retour du fread... il faudra
      //libérer la liste crée s'il y a un problème
      suivant = (liste) malloc(sizeof(carnet));
 
     //on récupére l'info sur la personne
     fread(&suivant->pers, sizeof(suivant->pers), 1, pf);
 
     //on met le pointeur à null
     suivant->suivant  = NULL;
 
     //on fait le lien
     temp->suivant = suivant;
     temp = suivant;
     }
    }
 
  fclose(pf);
 
return car;
} | 
 Jc
						
					
Partager