Mauvais affichage du fichier - C++ - Programmation
Marsh Posté le 26-04-2003 à 17:40:45
while (!fichier.eof())
{
fichier.read((char*)&m,sizeof(menu));
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 :
|
assure toi que ton ecriture est correct
et regarde bien tes if else
Code :
|
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
Marsh Posté le 26-04-2003 à 17:43:28
++Taz a écrit : |
c'est quoi le rapport ? on l'utilise comment en c/c++ l'eof ?
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?
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) (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 Sinon en effet je teste généralement la valeur de retour de Read.
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();
}