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

  FORUM HardWare.fr
  Programmation
  C++

  help ! seekg et ifstream , ça marche pas !

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

help ! seekg et ifstream , ça marche pas !

n°695051
fucky_fuck
Posté le 07-04-2004 à 19:30:04  profilanswer
 

Bonjour,  
 
j'ai le programme suivant : (c dans une fonction, et name est un paramètre)
 

Code :
  1. string s;
  2.   ifstream f(name.c_str());
  3.  
  4.   while (!f.eof())
  5.   {
  6.       f >>s;
  7.   }
  8.   f.seekg( 0, ios::beg ); // on se remet au début   
  9.   if (f.eof()) cout << "test à la con eof"<<endl;;
  10.  
  11.   f.close();


 
et il m'affiche bien le test à la con ...
ce qui veut dire qu'il ne revient pas au début !!!
est ce que quelqu'un veut bien me dire pourquoi
 
 
PS: Taz va me dire pas besoin de fermer le fichier,mais j'aimerai bien savoir pourquoi ... accessoirement ...


Message édité par fucky_fuck le 07-04-2004 à 19:35:26
mood
Publicité
Posté le 07-04-2004 à 19:30:04  profilanswer
 

n°695062
Taz
bisounours-codeur
Posté le 07-04-2004 à 19:51:38  profilanswer
 

je vais surtout te dire que c'est complètement pourri
 
 
  while(f >> s)
    {
      // noop
    }  
 
 
je recommence pas mes explications sur eof
 
pourquoi pas de close ? destructeur, ça te dit quelque chose ?
 
je recolle encore une fois

Code :
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. using namespace std;
  5. int main(int argc, char **argv)
  6. {
  7.   ifstream ifs;
  8.   istream *isp=0;
  9.   if(argc!=2)
  10.     {
  11.       cout << "Utilisation de « cin »\n";
  12.       isp=&cin;
  13.     }
  14.   else
  15.     {
  16.       cout << "Utilisation de  " << argv[1] << " \n";
  17.       ifs.open(argv[1]);
  18.       isp=&ifs;
  19.     }
  20.   istream &is(*isp);
  21.  
  22.   if(!is)
  23.     {
  24.       cout << "Impossible d\'ouvrir le flux\n";
  25.       return 1;
  26.     }
  27.   string s;
  28.   cout << "Lecture\n";
  29.   while(getline(is, s))
  30.     {
  31.       cout << s << '\n';
  32.     }
  33.   is.clear();
  34.   if(is.seekg(0, ifstream::beg))
  35.     {
  36.       cout << "Relecture\n";
  37.       while(getline(is, s))
  38. {
  39.   cout << s << '\n';
  40. }
  41.     }
  42.   else
  43.     {
  44.       cout <<  "Ce n'est pas un flux positionnable\n";
  45.     }
  46. }

n°695068
fucky_fuck
Posté le 07-04-2004 à 19:57:58  profilanswer
 

ouais evidemment j'aurai du penser au destructeur !
 
 
merci pour l'explication ! j'avais fait une recherche, mais apparemment j'avais mal cherché ! Merci ô grand maitre !
 
PS : sinon le while, j'ai autre chose dedans, ct juste pour faire court pour le post, normalement je lit des int, des float et des string..

n°695078
Taz
bisounours-codeur
Posté le 07-04-2004 à 20:09:54  profilanswer
 

bon ben je vois que t'as pas compris, et que je dois encore un fois recommencé ...
 
 
comment c'est foutu un stream ? ben dedans t'as sans doute un descripteur de fichier, un buffer et des drapeaux qui marquent l'état du flux (valide, erreur, fin_de_fichier)
 
et justement, c'est drapeaux, pour connaitre leur valeur (ou la modifier), on a tout un tas de fonctions dont fait partie feof : eof te renvoie true si le flag eof est positionné.
 
feof ne détectera __jamais__ la fin de fichier.
 
while(!f.eof()) ne fonctionnera __jamais__ en effet, le drapeau sera positionné à la première levée à cause d'une tentative de lecture alors que le pointeur de fichier est en bon de course. et non pas, eof sera positionné dès que la fin de fichier est atteinte (i.e après avoir lu le dernier enregistrement du fichier)
 
maintemant
 
while(f >> o) s'interrompt des qu'un drapeau d'erreur est positionné.
 
à toi de savoir si c'est eof en le testant ensuite.
 
si tu veux retravailler le flux, il faut remettre les drapeaux à zéro avec clear()


Message édité par Taz le 07-04-2004 à 20:10:08
n°695277
fucky_fuck
Posté le 07-04-2004 à 22:54:44  profilanswer
 

ok c compris cette fois !
 
désolé de t'avoir fait répéter...


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

  help ! seekg et ifstream , ça marche pas !

 

Sujets relatifs
Help pour compiler un programme *non limité dans le temps*HELP ! création d'une mailing list à partir d'un site web ...?
Help!! [boucle avec select]<link> marche sous IE mais pas sous mozilla ???
[PHP] Help changement imageIntegration flash : ça marche pas....:(
MasterMind en JAVASCRIPT. Help !probleme pointeur void alors qu'un cast de char* marche :\
Requete SQL Oracle : Pourquoi ca ne marche pas ?[vba] faire la somme dans un rapport help
Plus de sujets relatifs à : help ! seekg et ifstream , ça marche pas !


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