cin.get(string,int,OEF) et cin.getline(strng,int,EOF) : errreur
17 réponses
heinquoi
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"
<........>
Avec le message d'erreur suivant:
:\X Mes Documents X\Mes Programmes\VisualC++ 6\map2\mapmartinez.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 X\Mes Programmes\VisualC++ 6\map2\mapmartinez.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
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* a écrit dans le message de news:40c84d43$0$25503$
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" <........>
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
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@libertysurf.fr> a écrit dans le message de
news:40c84d43$0$25503$626a14ce@news.free.fr...
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"
<........>
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
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* a écrit dans le message de news:40c84d43$0$25503$
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" <........>
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
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
Luc Hermitte
"heinquoi" <nospam* wrote in news:40c84d43$0$25503$:
#include <strstream>
<sstream>, pas <strstream>
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>
"heinquoi" <nospam*heinquoi1@libertysurf.fr> wrote in
news:40c84d43$0$25503$626a14ce@news.free.fr:
#include <strstream>
<sstream>, pas <strstream>
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>
"heinquoi" <nospam* wrote in news:40c84d43$0$25503$:
#include <strstream>
<sstream>, pas <strstream>
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>
heinquoi
"Luc Hermitte" a écrit dans le message de news:
"heinquoi" <nospam* wrote in news:40c84d43$0$25503$:
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
"Luc Hermitte" <hermitte@free.fr.invalid> a écrit dans le message de
news:Xns9504943B59F00isyfur@127.0.0.1...
"heinquoi" <nospam*heinquoi1@libertysurf.fr> wrote in
news:40c84d43$0$25503$626a14ce@news.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
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 ?
"Luc Hermitte" <hermitte@free.fr.invalid> a écrit dans le message de
news:Xns9504943B59F00isyfur@127.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 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 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 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 ?
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 ?
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
Luc Hermitte
"heinquoi" <nospam* wrote in news:40c875f3$0$13811$:
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>
"heinquoi" <nospam*heinquoi1@libertysurf.fr> wrote in
news:40c875f3$0$13811$626a14ce@news.free.fr:
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>
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>
heinquoi
"Luc Hermitte" a écrit dans le message de news:
Je soupçonne un plusieurs d'ailleurs.
tout a fait... pourquoi ? Faut pas ?
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. 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
"Luc Hermitte" <hermitte@free.fr.invalid> a écrit dans le message de
news:Xns9504B03E2927Bisyfur@127.0.0.1...
Je soupçonne un
plusieurs d'ailleurs.
tout a fait... pourquoi ? Faut pas ?
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.
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
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. 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
Michel Michaud
Dans news:40c898ee$0$13821$,
"Luc Hermitte" a écrit dans le message de news:
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 http://www.gdzid.com FAQ de fr.comp.lang.c++ : http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
Dans news:40c898ee$0$13821$626a14ce@news.free.fr,
"Luc Hermitte" <hermitte@free.fr.invalid> a écrit dans le
message de news:Xns9504B03E2927Bisyfur@127.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 mm@gdzid.com
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
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 http://www.gdzid.com FAQ de fr.comp.lang.c++ : http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
heinquoi
"Michel Michaud" a écrit dans le message de news:uY0yc.43735 $
Dans news:40c898ee$0$13821$,
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
"Luc Hermitte" a écrit dans le message de news:
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 http://www.gdzid.com FAQ de fr.comp.lang.c++ : http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
"Michel Michaud" <mm@gdzid.com> a écrit dans le message de news:uY0yc.43735
$sS2.1562611@news20.bellglobal.com...
Dans news:40c898ee$0$13821$626a14ce@news.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
"Luc Hermitte" <hermitte@free.fr.invalid> a écrit dans le
message de news:Xns9504B03E2927Bisyfur@127.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 mm@gdzid.com
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
"Michel Michaud" a écrit dans le message de news:uY0yc.43735 $
Dans news:40c898ee$0$13821$,
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
"Luc Hermitte" a écrit dans le message de news:
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 http://www.gdzid.com FAQ de fr.comp.lang.c++ : http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/