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;
}
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;
}
N'hésitez pas à me demander d'autre partie de code si cela peut mieux vous aider Merci