Liste chainée dans un fichier - C - Programmation
Marsh Posté le 29-04-2006 à 10:04:16
Tu l'enregistres comme une liste classique, genre en CSV si tu veux que ce soit humainement lisible
Marsh Posté le 29-04-2006 à 10:08:24
Je n'ai pas lu ton code, (j'aurais peut-être du), mais tu peux lire le fichier en début de programme, et l'écrire en fin de programme (ou à chauqse ajout/suppression dans la liste).
Le principe est le suivant
la structure de ta liste chaînee
Code :
|
ecriture des data
Code :
|
lecture des données
Code :
|
Maintenant, pour l'écriture des données, tu peux utiliser un fwrite(ptr->ptrdata, sizeof(data), 1, fout) méthode simple mais qui n'est pas portable d'un système à l'autre (problèmes d'endianess) ou alors tu écris tes données au format CSV tout ce qu'il y a de plus portable.
La lecture des données dépendra évidemment du format d'écriture.
L'insertion des données est une simple insertion dans une liste chaînée, on trouve les algos partout sur le net.
Je viens de survoler ce que tu as écrit :
fflush(stdin); non standart, peut provoquer des comportement indéfinis, à proscrire
gets : bug connu, à proscrire.
scanf : fonction TRES difficile à utiliser, utilise fgets(tmp, sizeof(tmp), stdin);
Marsh Posté le 29-04-2006 à 20:37:00
Merci pour ton aide, l'écriture se passe sans problème mais je n'arrive toujours pas à reprendre les données du fichier pour les afficher !!
Je préfere utiliser des fread et fwrite car je n'ai pas vu les fout, ....
Voila ma fonction afficher :
Mon programme plante au niveau du fread (debugger)
Merci
Code :
|
Marsh Posté le 29-04-2006 à 23:06:59
MAD_DIM a écrit :
|
feof() ne sert pas à détecter la fin d'un fichier. Pour ça, il suffit de récupérer la valeur renvoyée par "fread()" qui renvoie le nb d'éléments lus. Si ce nb est "0", c'est qu'il n'y a plus rien à lire donc que tout le fichier a été traité.
feof() sert uniquement à t'indiquer si, en cas d'arrêt de la lecture, si l'arrêt est dû à l'évènement "fin de fichier" ou pas...
Sinon, ce serait plus portable de décomposer tes tâches en fonctions et de créer une fonction spéciale pour insérer un élément dans ta liste. Ensuite, que l'élément vienne d'un fichier ou d'ailleurs importe peu. Une fois que tu l'as, tu appelles toujours la même fonction pour l'insérer...
Marsh Posté le 29-04-2006 à 23:09:27
En clair, faire de la POO en C
Marsh Posté le 30-04-2006 à 09:24:48
MAD_DIM a écrit :
|
'lecture' est un pointeur non initialisé. Sa valeur est indéterminée. Passer une valeur indéterminée à une fonction invoque un comportement indéfini. Tout peut arriver.
Tu veux sans doute :
Code :
|
Marsh Posté le 29-04-2006 à 09:49:56
Bonjour,
J'aimerais savoir comment fait on pour enregistrer les données d'une liste chainée unidirectionnel dans un fichier et comment reprendre ces données du fichier pour les afficher ?
Je sais qu'il faut utiliser fread et fwrite mais lorsque je le fais , a mon avis je dois perdre l'adresse de tete.
Voici mon code, si vous pouviez me dire ou je dois mettre ces 2 fonctions ?
Merci