2016-10-12 2 views
0

J'ai parcouru beaucoup de réponses existantes ici StackOverflow, mais je suis toujours coincé.Comment effacer le tampon CIN en C++

code:

int c; 
cin >> c; 

if(cin.fail()) { 
    cout << "Wrong Input"; 
    cin.clear(); 
    cin.ignore(INT_MAX, '\n'); 
} 
else 
{ 
    cout << c*2; 
} 

Si j'entre essorez entrée au lieu d's par exemple un entier, il émet Wrong Input. Cependant, si je saisis un entier, puis que j'entre une chaîne, il ignore la chaîne et continue de sortir le résultat de l'entier précédent, donc il n'efface pas le tampon cin, et l'ancienne valeur de c continue à s'exécuter. Quelqu'un peut-il s'il vous plaît suggérer le meilleur moyen autre que cin.ignore() car il ne semble pas fonctionner. et oui pour moi, le max() dans cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); donne une erreur. Donc ça ne marche pas non plus.

+1

Pourquoi ne vous demande pas une question pour obtenir la bonne façon de le faire travailler? [This] (http://stackoverflow.com/questions/21567291/why-does-stdgetline-skip-input-after-a-formatted-extraction) est la bonne façon de gérer la situation. – NathanOliver

+0

Pouvez-vous clarifier votre question (par exemple en fournissant un [MCVE]). Je ne peux pas voir ce qui ne devrait pas fonctionner avec votre code. Je ne peux pas l'obtenir même à [compiler] (http://ideone.com/Syb32Q) –

+0

@NathanOliver Cela me donne l'erreur 'numeric_limits :: max()' la fonction max() me donne l'erreur '#define max (a, b) (((a)> (b)))? (a): (b)) 'même si je définis cette déclaration dans mon dossier. @ πάνταῥεῖ Je vais essayer de télécharger une vidéo, je pense que cela pourrait être plus clair. – Nix

Répondre

0

La fonction max() doit être définie au début du fichier. cin.ignore() fonctionne très bien pour effacer le tampon, mais vous avez besoin de la fonction de limites numériques max(), qui dans mon cas donnait une erreur.

Solution:

#ifdef max 
#define max 
#endif 

ajouter ces lignes sur le dessus, et une fonction comme suit fonctionnera très bien.

int id; 
bool b; 
do { 
    cout << "Enter id: "; 
    cin >> id; 
    b = cin.fail(); 
    cin.clear(); 
    cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
} while (b == true); 

P.S: Merci @Nathan