Fichier + liste chainée

Signaler
Messages postés
5
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
10 juin 2008
-
Messages postés
5
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
10 juin 2008
-
Bonsoir,

J'ai une question concernant l'écriture et la lecture de liste chainée dans un fichier.data

J'ai une structure PERS qui contient des infos (nom , âge et adresse de l'élément suivant) :

struct PERS {
    char nom[20];
    int age;
    struct PERS *psvt;
};

Ensuite , 2 fonctions , une pour ajouter des éléments et une autre pour afficher le contenu de la liste.

int Ajout(struct PERS *liste , FILE *fp)
{
       boucle pour saisir le nom et l'âge + malloc pour nouvel élément.
       un fwrite
}

void afficher (FILE *fp)
{
       un fread
       boucle pour afficher le contenu de la liste chainée
}

Je ne sais pas quels arguments donner à mon fwrite et fread.

D'avance merci.

6 réponses

Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

Bonsoir,

Si tout se passe directement avec un fichier il n'y a pas de liste chaînée ! Le pointeur psvt ne sert à rien. Aucun malloc n'est nécessaire.

Jean-François
Messages postés
5
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
10 juin 2008

Ok merci.

Mais imaginons que j'ai un fichier.dat déjà créé et que je dois rapatrier les données qui se trouvent sur le fichier dans une liste chainée basée sur :

struct PERS {
    char nom[20];
    int age;
    struct PERS *psvt;
};

Dans ma fonction qui lit les données sur le fichier , je ne vois pas comment je dois faire avec mon fread..
Messages postés
240
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
22 mars 2009

salut,

tu lit le contenu complet de ton fichier dans un buffer de la taille de ton fichier

void *buffer;

buffer = malloc....

ensuite tu fait un transtipage

(*PERS)buffer[0].nom

...

voila
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

Pour lire le fichier (pointé par pFichier) structure par structure :

FILE* pFichier = fopen("fichier.dat","rb");
if (pFichier == NULL) return; // erreur à l'ouverture
while (1)
{
   struct PERS* pPers = (struct PERS*)malloc(sizeof(struct PERS));
   if (fread(pPers,sizeof(struct PERS),1,pFichier) != 1) break;
}
fclose(pFichier);

Il ne reste plus qu'à chaîner les pPers !

Mais on peut aussi lire le fichier, structure par structure ou entièrement, dans un tableau de structures PERS et il n'y a plus besoin du pointeur psvt.

Jean-François
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

<strike>(*PERS)buffer[0].nom
</strike>



((PERS*)buffer[0])->nom
ou
(*(PERS*)buffer[0]).nom

Jean-François
Messages postés
5
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
10 juin 2008

Merci pour votre aide, je vai essayer celà.