C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

cin.get(string,int,OEF) et cin.getline(strng,int,EOF) : errr
Goto page 1, 2  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
heinquoi
Guest





PostPosted: Thu Jun 10, 2004 12:01 pm    Post subject: cin.get(string,int,OEF) et cin.getline(strng,int,EOF) : errr Reply with quote



bjr,
j'ai un petit prog qui ne fonctionne pas et je ne comprend pas bien
l'erreur:
// Variables
#include <string>
#include <iostream>
#include <map>
#include <fstream>
//#include <stdcomp>
#include <strstream>
#include "client.hpp"
<........>

string nom;
string adr;
cin.get(nom, 25); // erreur ici
cin.getline(adr, 50, EOF); // erreur ici

Avec le message d'erreur suivant:
:X Mes Documents XMes ProgrammesVisualC++ 6map2mapmartinez.cpp(163):
error: no instance of overloaded function "std::basic_istream<_E, _Tr>::get
[with _E=char, _Tr=std::char_traits<char>]" matches the argument list
argument types are: (std::string, int)
object type is: std::istream
cin.get(nom, 25);
^
D:X Mes Documents XMes ProgrammesVisualC++ 6map2mapmartinez.cpp(168):
error: no instance of overloaded function "std::basic_istream<_E,
_Tr>::getline [with _E=char, _Tr=std::char_traits<char>]" matches the
argument list
argument types are: (std::string, int, int)
object type is: std::istream
cin.getline(adr, 50, EOF);
^
Or cin.get et cin.getline sont 2 fonctions qui existe et qui prennent bien
les arguments (char*, int, int)...
Un truc m'echappe....probablememnt un petit truc !
Merci d'avance de votre aide
Cordialement
H


Back to top
heinquoi
Guest





PostPosted: Thu Jun 10, 2004 12:13 pm    Post subject: Re: cin.get(string,int,OEF) et cin.getline(strng,int,EOF) : Reply with quote



J'ai oublier de vous preciser qu'il y a dans le code un using namespace std;
pour ceux qui me prendrait pour plus debutant que je ne suis.
"heinquoi" <nospam*heinquoi1 (AT) libertysurf (DOT) fr> a écrit dans le message de
news:40c84d43$0$25503$626a14ce (AT) news (DOT) free.fr...
Quote:
bjr,
j'ai un petit prog qui ne fonctionne pas et je ne comprend pas bien
l'erreur:
// Variables
#include <string
#include #include #include //#include #include #include "client.hpp"
........

string nom;
string adr;
cin.get(nom, 25); // erreur ici
cin.getline(adr, 50, EOF); // erreur ici

Avec le message d'erreur suivant:
:X Mes Documents XMes ProgrammesVisualC++ 6map2mapmartinez.cpp(163):
error: no instance of overloaded function "std::basic_istream<_E,
_Tr>::get
[with _E=char, _Tr=std::char_traits<char>]" matches the argument list
argument types are: (std::string, int)
object type is: std::istream
cin.get(nom, 25);
^
D:X Mes Documents XMes ProgrammesVisualC++ 6map2mapmartinez.cpp(168):
error: no instance of overloaded function "std::basic_istream<_E,
_Tr>::getline [with _E=char, _Tr=std::char_traits<char>]" matches the
argument list
argument types are: (std::string, int, int)
object type is: std::istream
cin.getline(adr, 50, EOF);
^
Or cin.get et cin.getline sont 2 fonctions qui existe et qui prennent bien
les arguments (char*, int, int)...
Un truc m'echappe....probablememnt un petit truc !
Merci d'avance de votre aide
Cordialement
H





Back to top
Christophe de VIENNE
Guest





PostPosted: Thu Jun 10, 2004 12:28 pm    Post subject: Re: cin.get(string,int,OEF) et cin.getline(strng,int,EOF) : Reply with quote



heinquoi a écrit :
Quote:

string nom;
string adr;
cin.get(nom, 25); // erreur ici
cin.getline(adr, 50, EOF); // erreur ici


<snip erreurs>

Quote:
Or cin.get et cin.getline sont 2 fonctions qui existe et qui prennent bien
les arguments (char*, int, int)...

nom et adr sont des std::string, pas des char*. Rien de surprenant donc.

Regarde du côté de std::getline :

#include <string>
#include <iostream>

int main()
{
std::string buffer;
std::getline(std::cin, buffer);
}

A+

Christophe
--
Christophe de Vienne

Back to top
Luc Hermitte
Guest





PostPosted: Thu Jun 10, 2004 12:34 pm    Post subject: Re: cin.get(string,int,OEF) et cin.getline(strng,int,EOF) : Reply with quote

"heinquoi" <nospam*heinquoi1 (AT) libertysurf (DOT) fr> wrote in
news:40c84d43$0$25503$626a14ce (AT) news (DOT) free.fr:

Quote:
#include <strstream


Quote:
Or cin.get et cin.getline sont 2 fonctions qui existe et qui prennent
bien les arguments (char*, int, int)...
Un truc m'echappe....probablememnt un petit truc !

Comme le fait que std::string n'est pas un char * ?
^_^

Sinon, préfère std::getline(std::cin, chaine) à cin.getline(buffer,
taille_max).

--
Luc Hermitte <hermitte at free.fr>
FAQ de <news:fr.comp.lang.c++> :
<http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/>
Dejanews : <http://groups.google.com/advanced_group_search>

Back to top
heinquoi
Guest





PostPosted: Thu Jun 10, 2004 2:17 pm    Post subject: Re: cin.get(string,int,OEF) et cin.getline(strng,int,EOF) : Reply with quote


"Luc Hermitte" <hermitte (AT) free (DOT) fr.invalid> a écrit dans le message de
news:Xns9504943B59F00isyfur (AT) 127 (DOT) 0.0.1...
Quote:
"heinquoi" <nospam*heinquoi1 (AT) libertysurf (DOT) fr> wrote in
news:40c84d43$0$25503$626a14ce (AT) news (DOT) free.fr:


Comme le fait que std::string n'est pas un char * ?
^_^

Sinon, préfère std::getline(std::cin, chaine) à cin.getline(buffer,
taille_max).

effictivement, ...je me la suis joué bourrin la dessus.
Merci bien à tous
H



Back to top
heinquoi
Guest





PostPosted: Thu Jun 10, 2004 2:55 pm    Post subject: Re: cin.get(string,int,OEF) et cin.getline(strng,int,EOF) : Reply with quote


Quote:
"Luc Hermitte" <hermitte (AT) free (DOT) fr.invalid> a écrit dans le message de
news:Xns9504943B59F00isyfur (AT) 127 (DOT) 0.0.1...
Sinon, préfère std::getline(std::cin, chaine) à cin.getline(buffer,
taille_max).
std::getline me melange mes flux en entré


je l'ai utilisé comme ceci

<....>
std::string nom;
std::string adr;
std::cout << "epogkop";
std::getline ( cin, nom);
std::cout << "ndjfpiji";
std::getline(cin,adr);
<...>

je rentre Mon nom au premenier getline et au lieu d'apparaitre dans nom, il
apparait dans adresse
Il semble que cela produise un débordement, et ca me nique toute les autres
entrées ( par cin) du programme:
le programme marche tout seul sans que j'ai a mettre des entrées dans les
differents cin... Puis s'arrete, comme si il avait vidé un buffer d'avance.
Une idée ?



Back to top
drkm
Guest





PostPosted: Thu Jun 10, 2004 3:17 pm    Post subject: Re: cin.get(string,int,OEF) et cin.getline(strng,int,EOF) : Reply with quote

"heinquoi" <nospam*heinquoi1 (AT) libertysurf (DOT) fr> writes:

Quote:
std::getline me melange mes flux en entré

je l'ai utilisé comme ceci

....
^^^^^^


Qu'y a-t-il dans cette élipse ?

Quote:
std::string nom;
std::string adr;
std::cout << "epogkop";
std::getline ( cin, nom);
std::cout << "ndjfpiji";
std::getline(cin,adr);
...

je rentre Mon nom au premenier getline et au lieu d'apparaitre dans nom, il
apparait dans adresse
Il semble que cela produise un débordement, et ca me nique toute les autres
entrées ( par cin) du programme:
le programme marche tout seul sans que j'ai a mettre des entrées dans les
differents cin... Puis s'arrete, comme si il avait vidé un buffer d'avance.
Une idée ?

Traîne-t-il des lignes dans `cin' ? Quelque chose comme

stc::cin.ignore( std::numeric_limits< int >::max() , 'n' ) ;

change-t-il quelque chose ? Et en sortant `std::endl' à la fin de
chaque prompt ?

--drkm

Back to top
Luc Hermitte
Guest





PostPosted: Thu Jun 10, 2004 3:19 pm    Post subject: Re: cin.get(string,int,OEF) et cin.getline(strng,int,EOF) : Reply with quote

"heinquoi" <nospam*heinquoi1 (AT) libertysurf (DOT) fr> wrote in
news:40c875f3$0$13811$626a14ce (AT) news (DOT) free.fr:

Quote:
std::getline me melange mes flux en entré

je l'ai utilisé comme ceci

....
std::string nom;
std::string adr;
std::cout << "epogkop";
std::getline ( cin, nom);
std::cout << "ndjfpiji";
std::getline(cin,adr);
...

je rentre Mon nom au premenier getline et au lieu d'apparaitre dans
nom, il apparait dans adresse
Il semble que cela produise un débordement, et ca me nique toute les
autres entrées ( par cin) du programme:
le programme marche tout seul sans que j'ai a mettre des entrées dans
les differents cin... Puis s'arrete, comme si il avait vidé un buffer
d'avance. Une idée ?

Je soupçonne un
std::cin >> toto;
dans le <....>
Dans ce cas, il faut purger la ligne si elle n'est pas censée contenir
quoique ce soit d'autre. Si je me souviens bien, cela ce règle par un :
std::cin.ignore(std::numeric_limits<int>::max(),'n');
avant le getline.

--
Luc Hermitte <hermitte at free.fr>
FAQ de <news:fr.comp.lang.c++> :
<http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/>
Dejanews : <http://groups.google.com/advanced_group_search>

Back to top
heinquoi
Guest





PostPosted: Thu Jun 10, 2004 5:24 pm    Post subject: Re: cin.get(string,int,OEF) et cin.getline(strng,int,EOF) : Reply with quote


"Luc Hermitte" <hermitte (AT) free (DOT) fr.invalid> a écrit dans le message de
news:Xns9504B03E2927Bisyfur (AT) 127 (DOT) 0.0.1...
Quote:

Je soupçonne un
plusieurs d'ailleurs.

tout a fait... pourquoi ? Faut pas ?


Quote:
std::cin >> toto;
dans le <....
Dans ce cas, il faut purger la ligne si elle n'est pas censée contenir
quoique ce soit d'autre. Si je me souviens bien, cela ce règle par un :
std::cin.ignore(std::numeric_limits avant le getline.
Oui ca règle ...mais ca amène un autre probleme:

je met un cin.ignore (80) avant et apres chaque getline (cin.....)
j'ai essayé aussi uniquement apres, j'ai essayé aussi cin.ignore(5,'n'), ou
cin.ignore(8,EOF) .... a peu pres pareil plus ou moins fort. Cad, que le
programme attent autand de 'enter' ou a peu pres que de x dans cin.ignore(x)
avant de continuer son deroulement normale.
jutilise aussi les flux pour une sauvegarde fichier et j'utilise aussi ...
getline...

pour conclure, c'est mieux, mais c'est pas encore le top .
--
Cordialement,
Heinquoi



Back to top
Michel Michaud
Guest





PostPosted: Thu Jun 10, 2004 5:34 pm    Post subject: Re: cin.get(string,int,OEF) et cin.getline(strng,int,EOF) : Reply with quote

Dans news:40c898ee$0$13821$626a14ce (AT) news (DOT) free.fr,
heinquoi <nospam*heinquoi1 (AT) libertysurf (DOT) fr> a écrit :
Quote:
"Luc Hermitte" <hermitte (AT) free (DOT) fr.invalid> a écrit dans le
message de news:Xns9504B03E2927Bisyfur (AT) 127 (DOT) 0.0.1...
std::cin.ignore(std::numeric_limits<int>::max(),'n');
avant le getline.
Oui ca règle ...mais ca amène un autre probleme:
je met un cin.ignore (80) avant et apres chaque getline
(cin.....)

La logique de base qui fonctionne si tu veux être consistant et
lire directement les valeurs numériques avec >> (ce qui n'est pas
très solide) est de faire un ignore APRÈS chaque lecture avec >>
et pas après getline. En fait, l'idée est de ne jamais laisser
le délimiteur dans la zone tampon (>> le laisse, getline non).

Donc si tu lis avec >>, tu fais ensuite un ignore pour lire le
délimiteur. En fait, si tu ne veux pas valider les lectures
sérieusement, donc si tu supposes que les données sont bonnes, tu
peux faire un simple flux.ignore() (qui saute un seul caractère)
pour lire le délimiteur. Faire un ignore jusqu'à n, en pensant
qu'il y aura d'autres choses avant mais qu'on ne veut pas s'en
préoccuper, ce n'est pas vraiment une solution « supérieure » !

--
Michel Michaud [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/



Back to top
heinquoi
Guest





PostPosted: Thu Jun 10, 2004 6:53 pm    Post subject: Re: cin.get(string,int,OEF) et cin.getline(strng,int,EOF) : Reply with quote



"Michel Michaud" <mm (AT) gdzid (DOT) com> a écrit dans le message de news:uY0yc.43735
$sS2.1562611 (AT) news20 (DOT) bellglobal.com...
Quote:
Dans news:40c898ee$0$13821$626a14ce (AT) news (DOT) free.fr,

j'ai vu que tu as ecrit 2 livres et un troisieme est en preparation. Le
3eme m'interesse particulièrement.
Structures de données et algothmes en iso c++.
l'as tu terminé ?
de plus sache que, d'apres ton sommaire cela correspond tout a fait, a une
unite de valeur du diplome BAC+2 informatique d'entreprise du CNAM orleans
(que je passe cette année)
--
Cordialement,
Heinquoi


Quote:
heinquoi <nospam*heinquoi1 (AT) libertysurf (DOT) fr> a écrit :
"Luc Hermitte" <hermitte (AT) free (DOT) fr.invalid> a écrit dans le
message de news:Xns9504B03E2927Bisyfur (AT) 127 (DOT) 0.0.1...
std::cin.ignore(std::numeric_limits<int>::max(),'n');
avant le getline.
Oui ca règle ...mais ca amène un autre probleme:
je met un cin.ignore (80) avant et apres chaque getline
(cin.....)

La logique de base qui fonctionne si tu veux être consistant et
lire directement les valeurs numériques avec >> (ce qui n'est pas
très solide) est de faire un ignore APRÈS chaque lecture avec
et pas après getline. En fait, l'idée est de ne jamais laisser
le délimiteur dans la zone tampon (>> le laisse, getline non).

Donc si tu lis avec >>, tu fais ensuite un ignore pour lire le
délimiteur. En fait, si tu ne veux pas valider les lectures
sérieusement, donc si tu supposes que les données sont bonnes, tu
peux faire un simple flux.ignore() (qui saute un seul caractère)
pour lire le délimiteur. Faire un ignore jusqu'à n, en pensant
qu'il y aura d'autres choses avant mais qu'on ne veut pas s'en
préoccuper, ce n'est pas vraiment une solution « supérieure » !

--
Michel Michaud [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/





Back to top
Michel Michaud
Guest





PostPosted: Fri Jun 11, 2004 4:12 am    Post subject: Re: cin.get(string,int,OEF) et cin.getline(strng,int,EOF) : Reply with quote

Dans news:40c8adad$0$13812$626a14ce (AT) news (DOT) free.fr,
heinquoi <nospam*heinquoi1 (AT) libertysurf (DOT) fr> a écrit :
Quote:
j'ai vu que tu as ecrit 2 livres et un troisieme est en
preparation. Le 3eme m'interesse particulièrement.
Structures de données et algothmes en iso c++.
l'as tu terminé ?

En fait, j'en ai écrit et fini deux, que j'ai refondus et
retravaillés pour en faire un nouveau que je suis en train de
terminer ainsi que le troisième (quatrième ?) qui est déjà
distribué de façon limitée. J'espère finir les deux dans les
semaines qui viennent, pour qu'ils soient disponibles à la fin
de l'été, au Québec à tout le moins (je ne sais plus comment se
fait la distribution ailleurs).

Quote:
de plus sache que, d'apres ton sommaire cela correspond tout a
fait, a une unite de valeur du diplome BAC+2 informatique
d'entreprise du CNAM orleans (que je passe cette année)

Tant mieux si ça apporte des ventes Smile C'est sûr que c'est un
contenu classique, mais mon livre est très différent de ce que
je connais sur le sujet, visant plus la pratique que la théorie
en étant aussi très spécifique sur les possibilités de ISO C++.

--
Michel Michaud [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/


Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Fri Jun 11, 2004 7:59 am    Post subject: Re: cin.get(string,int,OEF) et cin.getline(strng,int,EOF) : Reply with quote

"Michel Michaud" <mm (AT) gdzid (DOT) com> wrote

Quote:
Dans news:40c898ee$0$13821$626a14ce (AT) news (DOT) free.fr,
heinquoi <nospam*heinquoi1 (AT) libertysurf (DOT) fr> a écrit :
"Luc Hermitte" <hermitte (AT) free (DOT) fr.invalid> a écrit dans le
message de news:Xns9504B03E2927Bisyfur (AT) 127 (DOT) 0.0.1...
std::cin.ignore(std::numeric_limits<int>::max(),'n');
avant le getline.
Oui ca règle ...mais ca amène un autre probleme: je met un
cin.ignore (80) avant et apres chaque getline (cin.....)

La logique de base qui fonctionne si tu veux être consistant et lire
directement les valeurs numériques avec >> (ce qui n'est pas très
solide) est de faire un ignore APRÈS chaque lecture avec >> et pas
après getline. En fait, l'idée est de ne jamais laisser le délimiteur
dans la zone tampon (>> le laisse, getline non).

Donc si tu lis avec >>, tu fais ensuite un ignore pour lire le
délimiteur. En fait, si tu ne veux pas valider les lectures
sérieusement, donc si tu supposes que les données sont bonnes, tu peux
faire un simple flux.ignore() (qui saute un seul caractère) pour lire
le délimiteur. Faire un ignore jusqu'à n, en pensant qu'il y aura
d'autres choses avant mais qu'on ne veut pas s'en préoccuper, ce n'est
pas vraiment une solution « supérieure » !

En général, je le trouve préférable à ne pas mélanger les lectures
orientées ligne et les lectures orientées champs. Si la syntaxe de ce
qu'on lit, c'est orientée ligne, je préfère ne lire que des lignes,
quitte à utiliser un istringstream pour les analyser par la suite.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Back to top
drkm
Guest





PostPosted: Fri Jun 11, 2004 11:37 am    Post subject: Re: cin.get(string,int,OEF) et cin.getline(strng,int,EOF) : Reply with quote

[email]kanze (AT) gabi-soft (DOT) fr[/email] writes:

Quote:
En général, je le trouve préférable à ne pas mélanger les lectures
orientées ligne et les lectures orientées champs.

Tu veux dire champs de longueur fixe ? Parceque, sinon, je ne vois
pas vraiment la différence. Les lignes sont des champs de longueur
variable, et de dilimiteur 'n'. Non ?

--drkm

Back to top
Michel Michaud
Guest





PostPosted: Fri Jun 11, 2004 1:11 pm    Post subject: Re: cin.get(string,int,OEF) et cin.getline(strng,int,EOF) : Reply with quote

Dans news:d6652001.0406102359.40c19ae2 (AT) posting (DOT) google.com,
[email]kanze (AT) gabi-soft (DOT) fr[/email] <kanze (AT) gabi-soft (DOT) fr> a écrit :
Quote:
"Michel Michaud" <mm (AT) gdzid (DOT) com> wrote in message
news:<uY0yc.43735$sS2.1562611 (AT) news20 (DOT) bellglobal.com>...
En général, je le trouve préférable à ne pas mélanger les
lectures orientées ligne et les lectures orientées champs. Si
la syntaxe de ce qu'on lit, c'est orientée ligne, je préfère ne
lire que des lignes, quitte à utiliser un istringstream pour
les analyser par la suite.

En fait, même (ou surtout) si la ligne contient plusieurs champs,
la façon la plus sûre est de lire la ligne au complet et de
l'analyser ensuite. Mais si l'on suppose qu'il n'y a pas d'erreurs
ou qu'on ne veut pas les vérifier, on peut voir getline comme un
version particulière de >>...

--
Michel Michaud [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/


Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.