¿Es posible leer valores infinitos o NaN utilizando flujos de entrada?
Tengo una entrada para ser leída por un flujo de archivos de entrada (por ejemplo):
-365.269511 -0.356123 -Inf 0.000000
Cuando yo usostd::ifstream mystream;
leer del archivo a algunos
double d1 = -1, d2 = -1, d3 = -1, d4 = -1;
(asumirmystream
ya ha sido abierto y el archivo es válido),
mystream >> d1 >> d2 >> d3 >> d4;
mystream
está en el estado de falla. Yo esperaría
std::cout << d1 << " " << d2 << " " << d3 << " " << d4 << std::endl;
para dar salida
-365.269511 -0.356123 -1 -1
. Me gustaría que saliera-365.269511 -0.356123 -Inf 0
en lugar.
Este conjunto de datos se generó utilizando flujos de C ++. ¿Por qué no puedo hacer el proceso inverso (leer en mi salida)? ¿Cómo puedo obtener la funcionalidad que busco?
Desde 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;
}
Entrada:inf
Salida:
inf
0:inf
Ver también:http://ideone.com/jVvei
También relacionado con este problema esNaN
Análisis, aunque no doy ejemplos para ello.
Agregué a la respuesta aceptada una solución completa sobre ideone. También incluye la combinación de "Inf" y "nan", algunas posibles variaciones de las palabras clave que pueden provenir de otros programas, como MatLab.