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

Ответы на вопрос(5)

Ваш ответ на вопрос