Bonjour, je rencontre un pb pour lire une liste chainée contenant une autre liste chainée dans un fichier.
La structure de ses listes est la suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
typedef struct Famille {
	char nom[30];
	struct Famille *next;
	struct Enfant *tete;
} Famille;
 
typedef struct Enfant {
	char prenom[30];
	struct Enfant *next;
} Enfant;
Pour enregistrer cette liste dans un fichier, j'utilise la fonction suivante :

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
 
void sauvegarder(Famille **tete) {
	Famille *p = *tete;
	Enfant *e = NULL;
	FILE *f = fopen("db3", "wb");
 
	while(p != NULL) {
		fwrite(p, sizeof(Famille), 1, f);
 
		e = p->tete;
		while(e != NULL) {
			fwrite(e, sizeof(Enfant), 1, f);
			e = e->next;
		}
 
		p = p->next;
	}
 
	fclose(f);
}
Mon probleme se trouve dans la fonction charger. Je ne sais pas quoi mettre dans la boucle qui va relier chaque enfant à une famille.
Voila le code de la fonction :

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
 
void charger(Famille **tete) {
	Famille *p = NULL, *q = NULL;
	Enfant *e = NULL, *ep = NULL;
	FILE *f = fopen("db3", "rb");
 
	*tete = NULL;
 
	while(!feof(f)) {
		p = (Famille *) malloc(sizeof(Famille));
		fread(p, sizeof(Famille), 1, f);
 
		if(*tete == NULL)
			*tete = p;
		else
			q->next = p;
		p->next = NULL;
		q = p;
 
		p->tete = NULL;
 
 		while() {
 			e = (Enfant *) malloc(sizeof(Enfant));
			fread(e, sizeof(Enfant), 1, f);
 
 			if(p->tete == NULL)
 				p->tete = e;
 			else
 				ep->next = e;
 			e->next = NULL;
 			ep = e;
 		}
	}
 
	fclose(f);
}
Merci d'avance pour votre aide.