do
{
cout << "Quel des relancer ? => ";
getline(cin,s);
}
while(!verif_string(s));
cout << endl << "tu relances : " << s <<endl;
verif_string() renvoie true si la chaine est valide, false sinon. le
problème est que dans ce petit bout de code, ça passe une première fois
dans verif_string() avant même d'avoir qqch dans 's' !
normalement ça ne devrait pas... ça n'est qu'au second passage dans la
boucle que je peux taper qqch... comme si ça faisait un getline dans le
vide...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Benoit Rousseau
Nicolas Aunai wrote:
salut,
comment fonctionne std::getline ?
je fais :
string s;
do { cout << "Quel des relancer ? => "; getline(cin,s); } while(!verif_string(s)); cout << endl << "tu relances : " << s <<endl;
verif_string() renvoie true si la chaine est valide, false sinon. le problème est que dans ce petit bout de code, ça passe une première fois dans verif_string() avant même d'avoir qqch dans 's' !
normalement ça ne devrait pas... ça n'est qu'au second passage dans la boucle que je peux taper qqch... comme si ça faisait un getline dans le vide...
getline ne prend pas le n en fin ligne...
il faut faire un get sur cin après...
-- -------------------------------------------- Benoît Rousseau : roussebe at spray dot se Jouez en programmant : http://realtimebattle.sourceforge.net/
Nicolas Aunai wrote:
salut,
comment fonctionne std::getline ?
je fais :
string s;
do
{
cout << "Quel des relancer ? => ";
getline(cin,s);
}
while(!verif_string(s));
cout << endl << "tu relances : " << s <<endl;
verif_string() renvoie true si la chaine est valide, false sinon. le
problème est que dans ce petit bout de code, ça passe une première fois
dans verif_string() avant même d'avoir qqch dans 's' !
normalement ça ne devrait pas... ça n'est qu'au second passage dans la
boucle que je peux taper qqch... comme si ça faisait un getline dans le
vide...
getline ne prend pas le n en fin ligne...
il faut faire un get sur cin après...
--
--------------------------------------------
Benoît Rousseau : roussebe at spray dot se
Jouez en programmant : http://realtimebattle.sourceforge.net/
do { cout << "Quel des relancer ? => "; getline(cin,s); } while(!verif_string(s)); cout << endl << "tu relances : " << s <<endl;
verif_string() renvoie true si la chaine est valide, false sinon. le problème est que dans ce petit bout de code, ça passe une première fois dans verif_string() avant même d'avoir qqch dans 's' !
normalement ça ne devrait pas... ça n'est qu'au second passage dans la boucle que je peux taper qqch... comme si ça faisait un getline dans le vide...
getline ne prend pas le n en fin ligne...
il faut faire un get sur cin après...
-- -------------------------------------------- Benoît Rousseau : roussebe at spray dot se Jouez en programmant : http://realtimebattle.sourceforge.net/
Nicolas Aunai
getline ne prend pas le n en fin ligne... il faut faire un get sur cin après...
getline ne prend pas le n en fin ligne... il faut faire un get sur cin après...
comment ça un "get sur cin" ?
getline(cin, s);
cin.get(); //Prendre un caractere dans cin ('n' en l'occurence)
-- -------------------------------------------- Benoît Rousseau : roussebe at spray dot se Jouez en programmant : http://realtimebattle.sourceforge.net/
Nicolas Aunai wrote:
getline ne prend pas le n en fin ligne...
il faut faire un get sur cin après...
comment ça un "get sur cin" ?
getline(cin, s);
cin.get(); //Prendre un caractere dans cin ('n' en l'occurence)
--
--------------------------------------------
Benoît Rousseau : roussebe at spray dot se
Jouez en programmant : http://realtimebattle.sourceforge.net/
getline ne prend pas le n en fin ligne... il faut faire un get sur cin après...
comment ça un "get sur cin" ?
getline(cin, s);
cin.get(); //Prendre un caractere dans cin ('n' en l'occurence)
-- -------------------------------------------- Benoît Rousseau : roussebe at spray dot se Jouez en programmant : http://realtimebattle.sourceforge.net/
Nicolas Aunai
"Benoit Rousseau" a présenté l'énoncé suivant :
comment ça un "get sur cin" ?
getline(cin, s);
cin.get(); //Prendre un caractere dans cin ('n' en l'occurence)
beh c'est bien ce que j'avais compris en fait, mais bien que ça ne me fait pas une itération pour rien maintenant ça n'arrive plus a capter ma chaine :
do { cout << "Quel des relancer ? => "; getline(cin,s); cin.get(); cout << "la chaine est : " << s << endl; } while(!verif_string(s)); cout << endl << "tu relances : " << s <<endl;
m'affiche :
------------------------------------ Quel des relancer ? => x x x . . la chaine est : la chaine est FALSE ! Quel des relancer ? => ------------------------------------
et ce indéfiniment, car il ne prend plus ma chaine...
cin.get(); //Prendre un caractere dans cin ('n' en l'occurence)
beh c'est bien ce que j'avais compris en fait, mais bien que ça ne me
fait pas une itération pour rien maintenant ça n'arrive plus a capter
ma chaine :
do
{
cout << "Quel des relancer ? => ";
getline(cin,s);
cin.get();
cout << "la chaine est : " << s << endl;
}
while(!verif_string(s));
cout << endl << "tu relances : " << s <<endl;
m'affiche :
------------------------------------
Quel des relancer ? => x x x . .
la chaine est :
la chaine est FALSE !
Quel des relancer ? =>
------------------------------------
et ce indéfiniment, car il ne prend plus ma chaine...
cin.get(); //Prendre un caractere dans cin ('n' en l'occurence)
beh c'est bien ce que j'avais compris en fait, mais bien que ça ne me fait pas une itération pour rien maintenant ça n'arrive plus a capter ma chaine :
do { cout << "Quel des relancer ? => "; getline(cin,s); cin.get(); cout << "la chaine est : " << s << endl; } while(!verif_string(s)); cout << endl << "tu relances : " << s <<endl;
m'affiche :
------------------------------------ Quel des relancer ? => x x x . . la chaine est : la chaine est FALSE ! Quel des relancer ? => ------------------------------------
et ce indéfiniment, car il ne prend plus ma chaine...
do { cout << "Quel des relancer ? => "; getline(cin,s); cin.get(); cout << "la chaine est : " << s << endl; } while(!verif_string(s)); cout << endl << "tu relances : " << s <<endl;
m'affiche :
------------------------------------ Quel des relancer ? => x x x . . la chaine est : la chaine est FALSE ! Quel des relancer ? => ------------------------------------
et ce indéfiniment, car il ne prend plus ma chaine...
d'ailleurs s'il existe une méthode plus simple et plus efficace pour choper une chaine un peu comme fgets() en C, je suis preneur !
do
{
cout << "Quel des relancer ? => ";
getline(cin,s);
cin.get();
cout << "la chaine est : " << s << endl;
}
while(!verif_string(s));
cout << endl << "tu relances : " << s <<endl;
m'affiche :
------------------------------------
Quel des relancer ? => x x x . .
la chaine est :
la chaine est FALSE !
Quel des relancer ? =>
------------------------------------
et ce indéfiniment, car il ne prend plus ma chaine...
d'ailleurs s'il existe une méthode plus simple et plus efficace pour
choper une chaine un peu comme fgets() en C, je suis preneur !
do { cout << "Quel des relancer ? => "; getline(cin,s); cin.get(); cout << "la chaine est : " << s << endl; } while(!verif_string(s)); cout << endl << "tu relances : " << s <<endl;
m'affiche :
------------------------------------ Quel des relancer ? => x x x . . la chaine est : la chaine est FALSE ! Quel des relancer ? => ------------------------------------
et ce indéfiniment, car il ne prend plus ma chaine...
d'ailleurs s'il existe une méthode plus simple et plus efficace pour choper une chaine un peu comme fgets() en C, je suis preneur !
do { cout << "Quel des relancer ? => "; getline(cin,s); } while(!verif_string(s)); cout << endl << "tu relances : " << s <<endl;
verif_string() renvoie true si la chaine est valide, false sinon. le problème est que dans ce petit bout de code, ça passe une première fois dans verif_string() avant même d'avoir qqch dans 's' !
normalement ça ne devrait pas... ça n'est qu'au second passage dans la boucle que je peux taper qqch... comme si ça faisait un getline dans le vide...
Je pense qu'il y a déjà des choses dans le tampon d'entrée. Quel est le code d'entrée sortie précédent ? Ce bout de programme fonctionne correctement chez moi.
-- Loïc
Nicolas Aunai wrote:
salut,
comment fonctionne std::getline ?
je fais :
string s;
do
{
cout << "Quel des relancer ? => ";
getline(cin,s);
}
while(!verif_string(s));
cout << endl << "tu relances : " << s <<endl;
verif_string() renvoie true si la chaine est valide, false sinon. le
problème est que dans ce petit bout de code, ça passe une première fois
dans verif_string() avant même d'avoir qqch dans 's' !
normalement ça ne devrait pas... ça n'est qu'au second passage dans la
boucle que je peux taper qqch... comme si ça faisait un getline dans le
vide...
Je pense qu'il y a déjà des choses dans le tampon d'entrée. Quel est le
code d'entrée sortie précédent ?
Ce bout de programme fonctionne correctement chez moi.
do { cout << "Quel des relancer ? => "; getline(cin,s); } while(!verif_string(s)); cout << endl << "tu relances : " << s <<endl;
verif_string() renvoie true si la chaine est valide, false sinon. le problème est que dans ce petit bout de code, ça passe une première fois dans verif_string() avant même d'avoir qqch dans 's' !
normalement ça ne devrait pas... ça n'est qu'au second passage dans la boucle que je peux taper qqch... comme si ça faisait un getline dans le vide...
Je pense qu'il y a déjà des choses dans le tampon d'entrée. Quel est le code d'entrée sortie précédent ? Ce bout de programme fonctionne correctement chez moi.
-- Loïc
Loïc Joly
Benoit Rousseau wrote:
getline ne prend pas le n en fin ligne...
il faut faire un get sur cin après...
???
21.3.7.9 Effects: Begins by constructing a sentry object k as if by typename basic_istream<charT,traits>::sentry k( is, true). If bool( k) is true, it calls str.erase() and then extracts characters from is and appends them to str as if by calling str.append(1, c) until any of the following occurs: -- endoffile occurs on the input sequence (in which case, the getline function calls is.setstate(ios_base::eofbit)). -- c == delimfor the next available input character c (in which case, c is extracted but not appended) (27.4.4.3) -- str.max_size() characters are stored (in which case, the function calls is.setstate(ios_base::failbit) (27.4.4.3)
-- Loïc
Benoit Rousseau wrote:
getline ne prend pas le n en fin ligne...
il faut faire un get sur cin après...
???
21.3.7.9
Effects: Begins by constructing a sentry object k as if by typename
basic_istream<charT,traits>::sentry k( is, true). If bool( k) is true,
it calls str.erase() and then extracts characters from is and appends
them to str as if by calling str.append(1, c) until any of the following
occurs:
-- endoffile occurs on the input sequence (in which case, the getline
function calls is.setstate(ios_base::eofbit)).
-- c == delimfor the next available input character c (in which case, c
is extracted but not appended) (27.4.4.3)
-- str.max_size() characters are stored (in which case, the function
calls is.setstate(ios_base::failbit) (27.4.4.3)
21.3.7.9 Effects: Begins by constructing a sentry object k as if by typename basic_istream<charT,traits>::sentry k( is, true). If bool( k) is true, it calls str.erase() and then extracts characters from is and appends them to str as if by calling str.append(1, c) until any of the following occurs: -- endoffile occurs on the input sequence (in which case, the getline function calls is.setstate(ios_base::eofbit)). -- c == delimfor the next available input character c (in which case, c is extracted but not appended) (27.4.4.3) -- str.max_size() characters are stored (in which case, the function calls is.setstate(ios_base::failbit) (27.4.4.3)
-- Loïc
Nicolas Aunai
Je pense qu'il y a déjà des choses dans le tampon d'entrée. Quel est le code d'entrée sortie précédent ? Ce bout de programme fonctionne correctement chez moi.
Je pense qu'il y a déjà des choses dans le tampon d'entrée. Quel est le code
d'entrée sortie précédent ?
Ce bout de programme fonctionne correctement chez moi.
Je pense qu'il y a déjà des choses dans le tampon d'entrée. Quel est le code d'entrée sortie précédent ? Ce bout de programme fonctionne correctement chez moi.
21.3.7.9 Effects: Begins by constructing a sentry object k as if by typename basic_istream<charT,traits>::sentry k( is, true). If bool( k) is true, it calls str.erase() and then extracts characters from is and appends them to str as if by calling str.append(1, c) until any of the following occurs: -- endoffile occurs on the input sequence (in which case, the getline function calls is.setstate(ios_base::eofbit)). -- c == delimfor the next available input character c (in which case, c is extracted but not appended) (27.4.4.3) -- str.max_size() characters are stored (in which case, the function calls is.setstate(ios_base::failbit) (27.4.4.3)
C'est en effet avec les get( char*, int, delim ) que j'avais eu ce
problème de delimiteur qui reste dans le flux... toutes mes excuses
-- -------------------------------------------- Benoît Rousseau : roussebe at spray dot se Jouez en programmant : http://realtimebattle.sourceforge.net/
Loïc Joly wrote:
Benoit Rousseau wrote:
getline ne prend pas le n en fin ligne...
il faut faire un get sur cin après...
???
21.3.7.9
Effects: Begins by constructing a sentry object k as if by typename
basic_istream<charT,traits>::sentry k( is, true). If bool( k) is true,
it calls str.erase() and then extracts characters from is and appends
them to str as if by calling str.append(1, c) until any of the following
occurs:
-- endoffile occurs on the input sequence (in which case, the getline
function calls is.setstate(ios_base::eofbit)).
-- c == delimfor the next available input character c (in which case, c
is extracted but not appended) (27.4.4.3)
-- str.max_size() characters are stored (in which case, the function
calls is.setstate(ios_base::failbit) (27.4.4.3)
C'est en effet avec les get( char*, int, delim ) que j'avais eu ce
problème de delimiteur qui reste dans le flux... toutes mes excuses
--
--------------------------------------------
Benoît Rousseau : roussebe at spray dot se
Jouez en programmant : http://realtimebattle.sourceforge.net/
21.3.7.9 Effects: Begins by constructing a sentry object k as if by typename basic_istream<charT,traits>::sentry k( is, true). If bool( k) is true, it calls str.erase() and then extracts characters from is and appends them to str as if by calling str.append(1, c) until any of the following occurs: -- endoffile occurs on the input sequence (in which case, the getline function calls is.setstate(ios_base::eofbit)). -- c == delimfor the next available input character c (in which case, c is extracted but not appended) (27.4.4.3) -- str.max_size() characters are stored (in which case, the function calls is.setstate(ios_base::failbit) (27.4.4.3)
C'est en effet avec les get( char*, int, delim ) que j'avais eu ce
problème de delimiteur qui reste dans le flux... toutes mes excuses
-- -------------------------------------------- Benoît Rousseau : roussebe at spray dot se Jouez en programmant : http://realtimebattle.sourceforge.net/
Loïc Joly
Nicolas Aunai wrote:
Je pense qu'il y a déjà des choses dans le tampon d'entrée. Quel est le code d'entrée sortie précédent ? Ce bout de programme fonctionne correctement chez moi.
C'est effectivement ça : Tu lis un char, mais il reste encore le saut de ligne (ou tout ce que l'utilisateur a tapé d'autre avant de valider) dans le flux d'entrée. Essaye par exemple de taper "O42" à la première question, et tu verras que s vaudra "42". Un des moyens de vider le tampon pour repartir sur de meilleurs bases consiste à ajouter cin.ignore() après le premier code.
-- Loïc
Nicolas Aunai wrote:
Je pense qu'il y a déjà des choses dans le tampon d'entrée. Quel est
le code d'entrée sortie précédent ?
Ce bout de programme fonctionne correctement chez moi.
C'est effectivement ça : Tu lis un char, mais il reste encore le saut de
ligne (ou tout ce que l'utilisateur a tapé d'autre avant de valider)
dans le flux d'entrée. Essaye par exemple de taper "O42" à la première
question, et tu verras que s vaudra "42".
Un des moyens de vider le tampon pour repartir sur de meilleurs bases
consiste à ajouter cin.ignore() après le premier code.
Je pense qu'il y a déjà des choses dans le tampon d'entrée. Quel est le code d'entrée sortie précédent ? Ce bout de programme fonctionne correctement chez moi.
C'est effectivement ça : Tu lis un char, mais il reste encore le saut de ligne (ou tout ce que l'utilisateur a tapé d'autre avant de valider) dans le flux d'entrée. Essaye par exemple de taper "O42" à la première question, et tu verras que s vaudra "42". Un des moyens de vider le tampon pour repartir sur de meilleurs bases consiste à ajouter cin.ignore() après le premier code.