Comment effacer le tampon cin en C++ ?
Réponses
Trop de publicités?C'est possible :
std::cin.ignore(INT_MAX);
Cela permet de lire et d'ignorer tout jusqu'à EOF
. (vous pouvez également fournir un second argument qui est le caractère à lire jusqu'à (ex : '\n'
pour ignorer une seule ligne).
Aussi : Vous voulez probablement faire un : std::cin.clear();
avant cela aussi pour réinitialiser l'état du flux.
cin.clear();
fflush(stdin);
C'est la seule chose qui a fonctionné pour moi lors de la lecture de la console. Dans tous les autres cas, la lecture était soit indéfinie en raison de l'absence d'informations sur l'identité de l'utilisateur. \n ou quelque chose resterait dans la mémoire tampon.
EDIT : J'ai découvert que la solution précédente a empiré les choses. Celle-ci, par contre, fonctionne :
cin.getline(temp, STRLEN);
if (cin.fail()) {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
J'ai trouvé deux solutions à ce problème.
La première, et la plus simple, est d'utiliser std::getline()
par exemple :
std::getline(std::cin, yourString);
... qui va rejeter le flux d'entrée quand il arrive à une nouvelle ligne. En savoir plus sur cette fonction aquí .
Une autre option qui rejette directement le flux est la suivante...
#include <limits>
// Possibly some other code here
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
Bonne chance !
int i;
cout << "Please enter an integer value: ";
// cin >> i; leaves '\n' among possible other junk in the buffer.
// '\n' also happens to be the default delim character for getline() below.
cin >> i;
if (cin.fail())
{
cout << "\ncin failed - substituting: i=1;\n\n";
i = 1;
}
cin.clear(); cin.ignore(INT_MAX,'\n');
cout << "The value you entered is: " << i << " and its double is " << i*2 << ".\n\n";
string myString;
cout << "What's your full name? (spaces inclded) \n";
getline (cin, myString);
cout << "\nHello '" << myString << "'.\n\n\n";
- Réponses précédentes
- Plus de réponses