Mauvais affichage du fichier

Mauvais affichage du fichier - C++ - Programmation

Marsh Posté le 26-04-2003 à 16:27:32    

Bonjour,
J'ai créé une fonction qui permet d'enregistrer les elements d'une strucutre dans un fichier. Lorsque je veux voir le contenu de ce fichier il manque le 1er caractere au 1er enregistrement puis les 2 premiers au second.... D'où vient le problème??
Voici le code qui permet l'affichage du contenu de mon fichier :

void affiche_menu (chaine)
{
   menu m;
   ifstream fichier("c:\\Menu.txt" );
   if (!fichier)
     cout<<"Impossible d'ouvrir le fichier out";
      else
         while (!fichier.eof())
         {
           fichier.read((char*)&m,sizeof(menu));
           cout<<"\nLe menu "<<m.num_menu<<" est compose de :\n";
     cout<<"\t"<<m.m_entree<<"\n";
           cout<<"\t"<<m.m_plat<<"\n";
           cout<<"\t"<<m.m_dessert<<"\n";
           cout<<"\t"<<"le prix de ce menu est : "<<m.m_prix<<" euros";
           cout<<"\n";
         }
      fichier.close();
      cin.get();
      cin.get();
      clrscr();
      presentation();
}

Reply

Marsh Posté le 26-04-2003 à 16:27:32   

Reply

Marsh Posté le 26-04-2003 à 17:40:45    

while (!fichier.eof())
        {
          fichier.read((char*)&m,sizeof(menu));
 
 
 :non:  
 
mauvaise utilisation de eof, on fait pas du pascal (si tu veux des explications, lis ta doc ou fait une recherche sur le problème)
.
 
une bonne utilisation serait

Code :
  1. while( fichier.read( reinterpret_cast< char * > (&m), sizeof m ) )
  2. {
  3.   // ...
  4. }


 
 
assure toi que ton ecriture est correct
 
et regarde bien tes if else

Code :
  1. if(fichier.is_open())
  2. {
  3.   // traitement
  4.   fichier.close()
  5. }
  6. else
  7. {
  8.   // erreur, mais pas la peine de fermer le fichier
  9. }


 
de toutes façons, le destructeur de stream appelle close() tout seul, donc, si tu n'a pas d'impératif, ne t'en préoccuppe pas


Message édité par Taz le 26-04-2003 à 17:41:03
Reply

Marsh Posté le 26-04-2003 à 17:43:28    

++Taz a écrit :


mauvaise utilisation de eof, on fait pas du pascal


 
:??: c'est quoi le rapport ? on l'utilise comment en c/c++ l'eof ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 26-04-2003 à 17:54:32    

ah tu me las fais pas antp, ou alors tu as jamais lu mes réponses. mais puisque c'est toi, je faire mon nième topo.
 
 
en Pascal, super langage qui inspire tous nos profs d'algorithmie, la fin-de-fichier arrive des que le dernier élément est lu. Donc
 
ouvrir FICHIER
tant-que non FIN-DE-FICHIER
  lire un element
  traitement
 
 
permet de lire __tous__ les éléments
 
en C et C++, ou la philosophie du traitement d'erreur est de controler chaque fonction (et pas de rien faire), les fonctione feof et X::eof sont des fonctions qui servent à caractériser les erreur d'E/S, et pas à les détecter. ce la signifie que l'algo précédent ne fonctionnera pas, car en C et C++, l'erreur se produit pour l'opération "lire un element", c'est à dire en tentant de lire un élément, ce qui provoque une erreur: toutes les fonctions E/S de ces langages renvoie des informations permettant de détecter s'il y a eu une erreur.
 
l'algorithme est donc
 
ouvrir FICHIER
 
tant-que retour-correct(lire un element)
  traitement
 
si FIN-DE--FICHIER
  alors // ok, on a lu tous les éléments
  sinon // il y a eu une véritable erreur d'E/S
 
 
OK?


Message édité par Taz le 26-04-2003 à 17:57:02
Reply

Marsh Posté le 26-04-2003 à 20:12:21    

heu en Pascal j'ai tj fait mes boucles comme en C :??:
enfin disons qu'en C j'ai tj fait des while(!eof) :D (mais bon, c'était au début à l'école)
 
edit: en fait je me souviens plus trop.
en Delphi j'utilise le TFileStream qui balance une exception quand on lit plus loin que la fin :whistle: Sinon en effet je teste généralement la valeur de retour de Read.


Message édité par antp le 26-04-2003 à 20:16:09

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed