Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2640 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Mauvais affichage du fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Mauvais affichage du fichier

n°372623
calistap
Posté le 26-04-2003 à 16:27:32  profilanswer
 

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();
}

mood
Publicité
Posté le 26-04-2003 à 16:27:32  profilanswer
 

n°372652
Taz
bisounours-codeur
Posté le 26-04-2003 à 17:40:45  profilanswer
 

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
n°372656
antp
Super Administrateur
Champion des excuses bidons
Posté le 26-04-2003 à 17:43:28  profilanswer
 

++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
n°372664
Taz
bisounours-codeur
Posté le 26-04-2003 à 17:54:32  profilanswer
 

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
n°372743
antp
Super Administrateur
Champion des excuses bidons
Posté le 26-04-2003 à 20:12:21  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Mauvais affichage du fichier

 

Sujets relatifs
Lecture dans un fichier : ligne par lignefaire disparaitre les case en haut a droite d'un fichier Excel
Comment vérifier si un fichier excel est déja ouvert ou non (VBA)??Ca s'ouvre avec quoi un fichier lib ?
Ouvrir un fichier en lecteur seuleEncore un soucis VBA !!! Affichage des enregistrements
[PHP] Problème d'upload et affichage de variableRenomer des fichier en BAT
[VBA-ACCESS]Import à partir d'un fichier .xls extremement long!!!!![html / asp ? ] En local : modifier un fichier, une page html...
Plus de sujets relatifs à : Mauvais affichage du fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR