pb de lecture dansun fichier - C - Programmation
Marsh Posté le 22-03-2004 à 22:24:23
logique. while (!feof(fic)) est true car tu fais fread dans la première instruction. fais une trace ça te paraitras logique
Marsh Posté le 22-03-2004 à 22:27:53
ignoble.
utilise les ifstream en binaire et voilà
http://cplusplus.com/ref/iostream/istream/read.html
le problèem c'est de toutes façons eof. eof ne dit pas si on est à la fin du fichier, mais si la dernière lecture a échouée à cause de eof.
donc on analyse ton programme
while(!eof) - ok, ça passe, le fichier vient d'etre ouvert
read - ok, on a lu le premier, le pointeur est en fin de fichier
while(!eof) - ok, on est en fin de fichier __mais__ aucune lecture infructueuse n'a été effectuée
read - échoue ... le contenu de tCD est le même que le dernier enregistrement puisqu'il n'est pas relu
while(!eof - voilà, ça termine
en bon programme ressemblera à
while(fichier.read(...))
{
// traitement
}
Marsh Posté le 22-03-2004 à 22:29:25
JagStang a écrit : logique. while (!feof(fic)) est true car tu fais fread dans la première instruction. fais une trace ça te paraitras logique |
moi j'ai fait la version détaillée. seulement faut bien avoué que ce sujet est un exemple magistral de comment il ne faut pas utiliser feof sous peine de traiter 2 fois le dernier enregistrement
Marsh Posté le 22-03-2004 à 23:03:23
et sans utiliser les ifstream y'a surement une solution ... en fait c pour un pot qui est en BTS info et il a pas encore fait tout ca ...
merci
Marsh Posté le 22-03-2004 à 23:06:05
c quoi le problème d'utiliser les fstream ? si tu utilise cout, tu utilise déjà les stream. tu peux jouer avec cout.write si tu veux ou cin.read ... l'interface des stream est semblabe aux FILE*, ça s'utilise tout seul, et au moins c'est du C++, pas du C
Marsh Posté le 22-03-2004 à 23:10:29
ben oui mais je te dit que quand t'utilises cout/cin, c'est déjà des stream, alors ça change rien, just ouvrir le fichier, et même usage que partout.
stdio est FILE*, quand tu utilises stdio, ben tu sais déjà comment on utilise un FILE*
Marsh Posté le 22-03-2004 à 22:22:05
salut
j'ai un pb de doublon à l'affichage. voila mon code :
FILE * fic ;
tCD leTab;
fic = fopen ("CDs.dat", "r" );
while (!feof(fic)){
fread(&leTab, sizeof (tCD),1,fic);
cout<<"L'identifiant du CD est :" << leTab.IdCD<<"\n";
cout<<"Le titre du CD est : " << leTab.Titre <<"\n";
cout<<"La date de sortie du CD est :"<<leTab.dateSortie<<"\n";
cout<<"Le commentaire sur le CD est :"<<leTab.commentaire<<"\n";
cout << " \n";
et donc si j'appelle cette fonction sur un fichier qui contient un seul enregistrement de ce type (le fichier est correct j'ai vérifié), il m'en affiche deux à la suite avant de quitter cette fonction. On dirait qu'il vapte mal la fin de fichier.
Si vous avez une suggestion.
merci beaucoup.