Wie man cin macht, nur Zahlen zu nehmen

7

Hier ist der Code

%Vor%

Mein Problem ist, dass wenn ich etwas wie 1x eingib, dann wird 1 als Eingabe genommen, ohne das Zeichen zu bemerken, das für einen anderen Lauf ausgelassen wurde. Gibt es einen Weg, wie man es mit irgendeiner reellen Zahl, z. 1.8?

    
user1426900 31.05.2012, 07:07
quelle

2 Antworten

7

Ich würde std::getline und std::string verwenden, um die ganze Zeile zu lesen und dann erst aus der Schleife auszubrechen, wenn Sie die gesamte Zeile in ein Double konvertieren können.

%Vor%     
Jesse Good 31.05.2012, 07:21
quelle
19

Wenn cin auf eine Eingabe stößt, kann sie die angegebene Variable nicht richtig einlesen (z. B. Eingabe eines Zeichens in eine Integer-Variable), sie geht in einen Fehlerzustand und belässt die Eingabe im Puffer.

Sie müssen mehrere Dinge tun, um dieses Szenario richtig zu behandeln.

  1. Sie müssen auf diesen Fehlerzustand testen.
  2. Sie müssen den Fehlerzustand löschen.
  3. Sie müssen entweder die Eingabedaten, die den Fehlerstatus generiert haben, entweder alternativ behandeln oder sie aussperren und den Benutzer erneut abfragen.

Der folgende Code bietet eine von zahlreichen Methoden, um diese drei Dinge zu tun.

%Vor%

Sie könnten einfach einen großen Wert an cin.ignore wie 1000 übergeben und es wird sich wahrscheinlich für alle praktischen Zwecke genau gleich verhalten.

Sie können cin auch nach dem Eingabeversuch testen und so behandeln, so etwas wie if (! cin) {// bereinige den Fehler}.

Überprüfen Sie die istream-Referenz für andere Elementfunktionen, um den Stream-Status zu verarbeiten: Ссылка

    
Shiven 31.05.2012 07:15
quelle

Tags und Links