У меня есть некоторый ввод, который должен быть прочитан входным сигнальным потоком (например):
-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
.
Этот набор данных был выведен с использованием потоков С++. Почему я не могу сделать обратный процесс (прочитанный в моем выпуске)? Как я могу получить функциональность, которую я ищу?
Из 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
синтаксическим разбором, хотя я не приводил примеры для нее.
Я добавил к принятому ответу полное решение по идеону. Он также включает в себя paring для "Inf" и "nan", некоторые возможные варианты для тех ключевых слов, которые могут быть получены из других программ, таких как MatLab.