Ist es möglich, Unendlich- oder NaN-Werte mithilfe von Eingabestreams zu lesen?

Ich habe einige Eingaben, die von einem Eingabedateistream gelesen werden sollen (zum Beispiel):

-365.269511 -0.356123 -Inf 0.000000

Wenn ich benutzestd::ifstream mystream; aus der Akte zu lesen, um einige

double d1 = -1, d2 = -1, d3 = -1, d4 = -1;

(annehmenmystream wurde bereits geöffnet und die Datei ist gültig),

mystream >> d1 >> d2 >> d3 >> d4;

mystream ist im Fehlerzustand. Ich würde erwarten

std::cout << d1 << " " << d2 << " " << d3 << " " << d4 << std::endl;

auszugeben

-365.269511 -0.356123 -1 -1. Ich würde es ausgeben wollen-365.269511 -0.356123 -Inf 0 stattdessen.

Dieser Datensatz wurde mit C ++ - Streams ausgegeben. Warum kann ich den umgekehrten Vorgang nicht ausführen (meine Ausgabe einlesen)? Wie kann ich die Funktionalität erhalten, die ich suche?

Aus MooingDuck:

#include <iostream>
#include <limits>

using namespace std;

int main()
{
  double myd = std::numeric_limits<double>::infinity();
  cout << myd << '\n';
  cin >> myd;
  cout << cin.good() << ":" << myd << endl;
  return 0;
}

Eingang:inf

Ausgabe:

inf
0:inf

Siehe auch:http://ideone.com/jVvei

Auch im Zusammenhang mit diesem Problem stehtNaN Analysieren, obwohl ich keine Beispiele dafür gebe.

Ich habe der akzeptierten Antwort eine vollständige Lösung für ideone hinzugefügt. Es enthält auch das Paring für "Inf" und "nan", einige mögliche Variationen zu den Schlüsselwörtern, die möglicherweise aus anderen Programmen stammen, wie z. B. MatLab.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage