126 votes

Comment vider le tampon cin ?

Comment effacer le tampon cin en C++ ?

6voto

Pourquoi pas :

cin.ignore(cin.rdbuf()->in_avail());

4voto

Shadow2531 Points 6726

Je préfère :

cin.clear();
fflush(stdin);

Il y a un exemple où cin.ignore n'est pas suffisant, mais je n'y pense pas pour le moment. C'était il y a un certain temps quand j'ai eu besoin de l'utiliser (avec Mingw).

Cependant, fflush(stdin) est un comportement non défini selon la norme. fflush() est seulement destiné aux flux de sortie. fflush(stdin) ne semble fonctionner comme prévu que sous Windows (avec les compilateurs GCC et MS au moins). comme une extension de la norme C .

Donc, si vous l'utilisez, votre code ne sera pas portable.

Voir Utilisation de fflush(stdin) .

Voir aussi http://ubuntuforums.org/showpost.php?s=9129c7bd6e5c8fd67eb332126b59b54c&p=452568&postcount=1 pour une alternative.

4voto

Bobul Mentol Points 124

Une autre solution possible (manuelle) est

cin.clear();
while (cin.get() != '\n') 
{
    continue;
}

Je ne peux pas utiliser fflush ou cin.flush() avec CLion, c'est donc très pratique.

4voto

Le moyen le plus simple :

cin.seekg(0,ios::end);
cin.clear();

Elle positionne simplement le pointeur cin à la fin du flux stdin et cin.clear() efface tous les drapeaux d'erreur tels que le drapeau EOF.

3voto

Amrit Malla Points 123

Ça a marché pour moi. J'ai utilisé la boucle for avec getline().

cin.ignore()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X