Salut à tous,
Tout d'avoir merci d'avoir pris le temps de lire mon problème.

Voila, je veux lire un fichier où j'ai stocké une liste chaînée double, j'ai créer la fonction suivante mais à la fin ca retourn que le dernier élément!! et je ne vois pas d'où vient l'erreur.

La structure de la liste :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
typedef struct etudiant
{
   struct etudiant *prec;
   struct etudiant *suiv;
   char nom[15];
   char prenom[15];
   int niveau;
   char adresse[30];
   char filiere[10];
   char tel[10];
} etudiants;
 
typedef struct dlist
{
   size_t length;
   etudiants *p_head;
   etudiants *p_tail;
}Dlist;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
50
51
52
53
54
55
56
57
58
59
60
 
Dlist **recupfichier(etudiants *pers) //recuperation du fichier
{
	etudiants *nouvo, *tmp;
	Dlist *l;
	l=malloc(sizeof(Dlist));
	FILE *fic; //variable type fichier
    char nom[15],prenom[15],filiere[15],adresse[30], tel[10];
    int niveau;
	int cmpt=1;
 
	if(!pers) //si la liste n'existe pas
	{
		pers = malloc(sizeof(etudiants));
        nouvo = malloc(sizeof(etudiants));
		l->p_head=pers;
        pers->suiv = NULL;
		pers->prec = NULL;
		nouvo = pers;
		//ouverture ou creation du fichier en ecriture et test si probleme
		if((fic = fopen("GestionEtudiants.txt", "r"))==NULL) printf("erreur d'ouverture");
		else //si pas de probleme
		{
            while(fscanf(fic, "%s\n", nom)!=-1) //si il y a encore un nom de famille
			{
			    nouvo=malloc(sizeof(etudiants));								   //a lire dans le fichier
				strcpy(nouvo->nom, nom);
				fscanf(fic, "%s\n", prenom); //lit un prenom et le met dans variable
                strcpy(nouvo->prenom, prenom); //met dans la cellule
                fscanf(fic, "%s\n", adresse);
				strcpy(nouvo->adresse, adresse);
				fscanf(fic, "%s\n", tel);
				strcpy(nouvo->tel, tel);
				fscanf(fic, "%s\n", filiere);
				strcpy(nouvo->filiere, filiere);
				fscanf(fic, "%d\n", &niveau);
 
				//cree une nouvelle cellule
            tmp=malloc(sizeof(etudiants));
            tmp = nouvo;
            etudiants *nouvo;
            nouvo = malloc(sizeof(etudiants));
			tmp->suiv = nouvo;
			nouvo->prec = tmp;
			//l->p_head=pred;
        }
			//efface la derniere cellule cree car ne sert a rien
			free(nouvo);
			tmp->suiv = NULL;
                        l->p_tail=tmp;
		}
 
		fclose(fic); //ferme le fichier
 
	}
	else printf("\n###  impossible de charger le fichier, une liste existe deja...  ###\n");
 
    //affichertous(l);
	return &l; //renvoi l'adresse de la liste
}