[pb ifstream] get zap des caracters

get zap des caracters [pb ifstream] - C++ - Programmation

Marsh Posté le 03-10-2003 à 22:47:26    

exemple :

Code :
  1. char c;
  2. ifstream fi;
  3.      
  4. ...
  5. while(!fi.eof())
  6. {
  7.    ...
  8.    fi.get(c);
  9. }


 
le pb c que fi.get(c) zapp qq caracters (tres peu), c un pb qui disparait si j'alterne avec fi>>c (mais c chian) ou si j'ouvre/ferme le fichier ds la boucle
comment g pe remedier a ca? yaurait pas une fonction pour nettoyer le tempon d'entrée ou un truc comme ca? (g dit ca au pif, j connai rien)

Reply

Marsh Posté le 03-10-2003 à 22:47:26   

Reply

Marsh Posté le 03-10-2003 à 23:12:35    

pourquoi pas un getline???

Reply

Marsh Posté le 03-10-2003 à 23:20:44    

peut etre que tu n'aurais jamais rien compris à eof ? fais une recherche.
 
while(cin >> c)
{ }
 
ou avec get
 
while((c=cin.get()) != EOF)
 
ou while(cin.get(c))
 
 
etc, etc, etc

Reply

Marsh Posté le 03-10-2003 à 23:21:33    

Riot a écrit :

pourquoi pas un getline???

si c'est pour sortir la version fonction membre avec un char*, très peu pour moi

Reply

Marsh Posté le 04-10-2003 à 09:44:25    

excusez-moi de polluer le topic, mais j'aimerais revenir sur l'emploi du char* en C++ :
parfois on est bien obligé de l'employer non ? par exemple avec une fonction de l'API windows qui demande un char* en argument pour écrire le résultat dedans, comment faire pour lui donner un objet string, via les méthodes data ou c_str ? j'ai pas réussi dans ce sens (remplir une string, mais y accéder ça va avec c_str), quelqu'un aurait un bout de code ? merci

Reply

Marsh Posté le 04-10-2003 à 10:07:22    

impossible avec une string. à ce moment là, tu clones ta string dans un vector, et tu passes &v[0] en paramètre.

Reply

Marsh Posté le 04-10-2003 à 10:51:13    

Taz a écrit :

peut etre que tu n'aurais jamais rien compris à eof ? fais une recherche.
 
while(cin >> c)
{ }
 
ou avec get
 
while((c=cin.get()) != EOF)
 
ou while(cin.get(c))
 
 
etc, etc, etc
 


 
ya quoi a comprender sur eof?
 
sinon il fo que j'utilise get(c) (g essayer ce que tu propose, et c vraiment pas ca)
g repete qd il aspire les caracters yen a certain(genre 1 sur 100 au max) et pas les derniers qui passent aux oubliette, et si g parle d'une fonction qui evite ce pb c pq g croit qui yen a une qui le fait en C avec la stdio

Reply

Marsh Posté le 04-10-2003 à 10:57:13    

Taz a écrit :

impossible avec une string. à ce moment là, tu clones ta string dans un vector, et tu passes &v[0] en paramètre.


C'est pas un peu chelou tout çà quand même ?

Reply

Marsh Posté le 04-10-2003 à 10:59:05    

Joel F a écrit :


C'est pas un peu chelou tout çà quand même ?

absolument pas, la spécification de vector assure la contiguité et que vector<T>::iterator est assimilable à un T*
 
 
pour eof, ben tu fais une recherche, ou tu lis la doc.

Reply

Marsh Posté le 04-10-2003 à 11:00:04    

skelter a écrit :


 
ya quoi a comprender sur eof?
 
sinon il fo que j'utilise get(c) (g essayer ce que tu propose, et c vraiment pas ca)
g repete qd il aspire les caracters yen a certain(genre 1 sur 100 au max) et pas les derniers qui passent aux oubliette, et si g parle d'une fonction qui evite ce pb c pq g croit qui yen a une qui le fait en C avec la stdio

on capte rien à ce que tu veux. ce que j'ai montré marche très bien. si tu t'es mis à utiliser cstdio, c'est que t'es déjà dans le mur

Reply

Marsh Posté le 04-10-2003 à 11:00:04   

Reply

Marsh Posté le 04-10-2003 à 11:00:08    

Taz a écrit :

absolument pas, la spécification de vector assure la contiguité et que vector<T>::iterator est assimilable à un T*


 
Donc faut faire un std::copy du string vers le vector et passer le begin() du vector ?

Reply

Marsh Posté le 04-10-2003 à 11:00:45    

même pas.
 
std::vector<char> buffer(s.begin(), s.end());

Reply

Marsh Posté le 04-10-2003 à 11:02:48    

oui d'accord :p
mais is le vector est deja construit ....

Reply

Marsh Posté le 04-10-2003 à 11:05:16    

ben tu clear() et après insert
ou bien, clear et copy+back_inserter
ou encore, resize + copy

Reply

Marsh Posté le 04-10-2003 à 17:12:11    

bon ba g trouver la solution a mon pb mais c bizar,
a un moment g fait fi.seekg(-1,ios::cur), g remplacer par fi.putback(c) et la ya plus de pb, en tout cas ce qui est sur c que si on utilise les methodes seekg, read, operateur >> avec les methodes get(char),get,putback,... sur le meme objet ca sali la lecture(pq c pas la premiere fois que ca m'arrive)

Reply

Marsh Posté le 04-10-2003 à 17:35:40    

ça ne salit rien, seulement tu bricoles jusqu'a que ça marche sans te demander une seule fois pourquoi telle ou telle fonction membre a tel ou tel comportement et ce que cela implique.

Reply

Marsh Posté le 04-10-2003 à 18:07:27    

ok, la ta sans doute raison, mais c pa ma faute, g pas vraiment trouver de doc detailler la dessus
g trouver un site ou ils disent par ex que fi>>c et fi.get(c) c la meme chose or c faut car >> zap pas mal de caracter(les espaces,\n,...) alor que get(char) prend tout les caracter
==>t'aurai pas une adresse ou tout est expliqué?

Reply

Marsh Posté le 04-10-2003 à 18:16:30    

ben ça dépend du mode, en binaire, c'est pas meme chose, etc  
http://www.dinkumware.com/refxcpp.html

Reply

Sujets relatifs:

Leave a Replay

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