Можно ли считать значения бесконечности или NaN, используя входные потоки?
У меня есть некоторые входные данные для чтения входного потока файлов (например):
-365.269511 -0.356123 -Inf 0.000000
Когда я используюstd::ifstream mystream;
читать из файла некоторым
double d1 = -1, d2 = -1, d3 = -1, d4 = -1;
(предполагатьmystream
уже был открыт и файл действителен),
mystream >> d1 >> d2 >> d3 >> d4;
mystream
находится в состоянии сбоя. Я бы ожидал
std::cout << d1 << " " << d2 << " " << d3 << " " << d4 << std::endl;
выводить
-365.269511 -0.356123 -1 -1
, Я хотел бы, чтобы это вывело-365.269511 -0.356123 -Inf 0
вместо.
Этот набор данных был выведен с использованием потоков C ++. Почему я не могу сделать обратный процесс (прочитайте в моем выводе)? Как я могу получить функциональность, которую я ищу?
От 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;
}
Входные данные:inf
Выход:
inf
0:inf
Смотрите также:http://ideone.com/jVvei
Также связана с этой проблемойNaN
Разбор, хотя я не приводил примеры для этого.
Я добавил к принятому ответу полное решение по ideone. Он также включает в себя очистку для "Inf" и «nan» - некоторые возможные варианты тех ключевых слов, которые могут быть из других программ, таких как MatLab.