Можно ли читать значения бесконечности или 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 
#include 

using namespace std;

int main()
{
  double myd = std::numeric_limits::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.

44
задан Drise 16 July 2012 в 15:59
поделиться