2016-10-12 5 views
0

zu löschen Ich habe viele bestehende Antworten hier StackOverflow gegangen, aber ich bin immer noch fest.Wie cin Buffer in C++

Code:

int c; 
cin >> c; 

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

Wenn I-Eingabe ein auspressen z.B s anstelle einer ganzen Zahl ist, gibt es Wrong Input. Wenn ich jedoch eine ganze Zahl eingib und dann eine Zeichenfolge eingibt, ignoriert sie die Zeichenfolge und gibt das vorherige ganzzahlige Ergebnis aus. Daher löscht sie den cin-Puffer nicht, und der alte Wert c wird weiterhin ausgeführt. Kann mir bitte jemand den besten Weg vorschlagen, außer cin.ignore(), da es nicht zu funktionieren scheint. und ja, für mich gibt der max() in cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); Fehler. Also funktioniert das auch nicht.

+1

Warum fragen Sie nicht eine Frage der richtigen Art und Weise bekommen diese Arbeit zu tun? [This] (http://stackoverflow.com/questions/21567291/why-does-stdgetline-skip-input-after-a-formatted-extraction) ist der richtige Weg, um mit der Situation umzugehen. – NathanOliver

+0

Können Sie Ihre Frage klarer stellen (z. B. mit [MCVE]). Ich kann nicht erkennen, was mit deinem Code nicht funktionieren sollte. Ich kann es nicht einmal zu [kompilieren] (http://ideone.com/Syb32Q) –

+0

@NathanOliver Das gibt mir den Fehler 'numeric_limits :: max()' die Max() -Funktion gibt mir den Fehler '#define max (a, b) (((a)> (b)))? (a): (b)) "Auch wenn ich diese Aussage in meiner Akte definiere. @ πάνταῥεῖ Ich werde versuchen, ein Video hochzuladen, ich denke, das könnte klarer sein. – Nix

Antwort

0

Die Funktion max() muss am Anfang der Datei definiert werden. cin.ignore() funktioniert sehr gut, um den Puffer zu löschen, aber Sie benötigen die numerische Begrenzungsfunktion max(), die in meinem Fall Fehler gab.

Lösung:

#ifdef max 
#define max 
#endif 

fügen Sie diese Zeilen auf der Oberseite und eine Funktion wie folgende wird gut funktionieren.

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: Danke @Nathan