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.
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
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) –
@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