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.