[C++] cin suivi de getline

Fermé
NicoASM7 Messages postés 15 Date d'inscription lundi 20 juin 2005 Statut Membre Dernière intervention 8 juillet 2008 - 28 avril 2006 à 20:33
 pca - 19 oct. 2008 à 06:27
Bonjour,
je pense que ma question que je vais poser l'a déjà été de nombreuses fois, mais comme je n'ai pas trouvé la solution au problème après avoir cherché longuement je la pose ici en espérant que quelqu'un puisse m'aider là dessus.

voilà pour le code , ce que je veux c'est lire un entier suivi d'une chaîne de caractères, une ligne entière plus précisément et dans cet ordre.


int i;
string s;
cin >> i;
getline(cin,s);

Lors de l'exécution, l'entier est demandé mais ensuite le getline est sauté.
Après avoir changé l'ordre en mettant le getline avant le cin, cela ne me saute pas le getline : ainsi dans ce cas ça marche.

Seulement j'aimerais que cela marche dans l'ordre lecture entier et chaîne ..

J'ai vu dansdes posts extérieurs à ce site que certains utilisaient cin.clear(), ou cout << flush . Je me doutais bien que le problème portait sur le buffer. (en C avec fflush(stdin);)
Néanmoins je n'ai pas trouvé la solution.

Merci à tous ceux pouvant m'aider de la manière la plus simple ( si possible ne pas utiliser d'autres #include que ceux de string et iostream) dans la mesure où je suis étudiant en 1ère année et je ne peux pas me permettre de mettre quelque chose que je connais pas du tout.

2 réponses

Je vois que depuis 2 ans personne n'a donné de solution. J'ai déjà été confronté à ce problème de '\n' qui traine dans le buffer d'entrée sans jamais trop savoir comment m'y prendre (et les profs n'avaient pas non plus d'idée). Si jamais quelqu'un avait une astuce, ça serait d'une grande aide !
1
si vous etes certain qu'il s'agit du retour-chariot qui reste dans le buffer (ce qui est normalement le cas, surtout si un cin.clean() est effectuer), vous pouvez toujorus employer "cin.get();"
cela aura pour effet d'avaler le caratere, mais sans plus :)
0