Bonsoir,
Voila j'ai un soucis lors de l'ordre de lecture d'une liste que j'ai écrite dans un fichier. Par exemple j'écris la liste suivante dans mon fichier:
('c', 2) ('u', 2) ('o', 2)
Puis lors de la lecture la liste que je lis est:
('c', 2), ('o', 2), ('u', 2)
Pourtant je lis dans le bon ordre je ne comprend vraiment pas pourquoi...
Voici les 3 fonctions que j'utilise pour ceci:
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 void ecrireLst(FILE *f, liste l) { while (l != NULL) { if (fwrite(&l->data.element->data, sizeof l->data.element->data, 1, f) != 1) { fputs("ecrireLst: Echec d'ecriture du char", stderr); exit(1); } if (fwrite(&l->data.poids, sizeof l->data.poids, 1, f) != 1) { fputs("ecrireLst: Echec d'ecriture du int", stderr); exit(1); } l = l->suivant; } return; }
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 liste lireLst(FILE *f, size_t n) { liste res = NULL; size_t i = 0; char c; int nb; arbre a; arbrepoids ap; for ( ; i < n; i++) { if (fread(&c, sizeof c, 1, f) != 1) { libere_listeEntiere(&res); fputs("lireLst: Echec de lecture du char", stderr); exit(1); } if (fread(&nb, sizeof nb, 1, f) != 1) { libere_listeEntiere(&res); fputs("lireLst: Echec de lecture du int", stderr); exit(1); } a = feuille(c); ap.element = a; ap.poids = nb; res = creer_liste(ap, res); } return res; }N'hésitez pas à me demander d'autre partie de code si cela peut mieux vous aider Merci
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 liste creer_liste (arbrepoids e, liste l) { /* Allocation memoire */ liste ma_liste = malloc (sizeof (*ma_liste)); if (ma_liste) { liste ptr_l = l; ma_liste->data = e; ma_liste->suivant = NULL; /* Cas de l'insertion dans une liste nulle */ if (l == NULL) { return ma_liste; } /* Cas de l'insertion en tete de liste */ if (ma_liste->data.poids < ptr_l->data.poids) { ma_liste->suivant = ptr_l; return ma_liste; } /* Cas autres */ while (ptr_l->suivant != NULL && ptr_l->suivant->data.poids < ma_liste->data.poids) { ptr_l = ptr_l->suivant; } /* Insertion apres */ ma_liste->suivant = ptr_l->suivant; ptr_l->suivant = ma_liste; return l; } else { fprintf (stderr, "creer_liste : erreur, probleme d'allocation memoire.\n"); exit (1); } return NULL; }
Partager