Comment effacer le tampon cin en C ++?
c++
cin
io-buffering
Dana le sain d'esprit
la source
la source
Je préférerais les contraintes de taille C ++ aux versions C:
la source
cin
et utilise la première instruction ci-dessus pour vider lecin
tampon, alors il continue à demander une entrée jusqu'à ce que j'entreEOF
en appuyant surctrl+d
?C'était la seule chose qui fonctionnait pour moi lors de la lecture depuis la console. Dans tous les autres cas, il serait lu indéfiniment en raison du manque de \ n, ou quelque chose resterait dans le tampon.
EDIT: J'ai découvert que la solution précédente a aggravé les choses. Celui-ci fonctionne cependant:
la source
J'ai trouvé deux solutions à cela.
Le premier, et le plus simple, consiste à utiliser
std::getline()
par exemple:... cela rejettera le flux d'entrée lorsqu'il atteindra une nouvelle ligne. En savoir plus sur cette fonction ici .
Une autre option qui rejette directement le flux est la suivante ...
Bonne chance!
la source
la source
Que diriez-vous:
la source
Je préfère:
Il y a un exemple où cin.ignore ne le coupe tout simplement pas, mais je ne peux pas y penser pour le moment. Il y a quelque temps, j'avais besoin de l'utiliser (avec Mingw).
Cependant, fflush (stdin) est un comportement non défini selon la norme. fflush () est uniquement destiné aux flux de sortie. fflush (stdin) ne semble fonctionner comme prévu sur Windows (avec les compilateurs GCC et MS au moins) comme une extension à la norme C .
Donc, si vous l'utilisez, votre code ne sera pas portable.
Voir Utilisation de fflush (stdin) .
Voir également http://ubuntuforums.org/showpost.php?s=9129c7bd6e5c8fd67eb332126b59b54c&p=452568&postcount=1 pour une alternative.
la source
Une autre solution (manuelle) possible est
Je ne peux pas utiliser fflush ou cin.flush () avec CLion, c'est donc très pratique.
la source
Moyen le plus simple:
Il positionne simplement le pointeur cin à la fin du flux stdin et cin.clear () efface tous les indicateurs d'erreur tels que l'indicateur EOF.
la source
Les éléments suivants devraient fonctionner:
Sur certains systèmes, il n'est pas disponible et vous pouvez alors utiliser:
la source
flush
méthode est pour la sortie uniquement et traite des caractères déjà écrits.basic_istream<char>' has no member named 'flush'
puis utilisez la fonction
la source
cin.get()
semble le vider automatiquement assez curieusement (probablement pas préféré, car cela est déroutant et probablement capricieux).la source
Cela a fonctionné pour moi. J'ai utilisé une boucle for avec getline ().
la source