У меня есть некоторый ввод для чтения входным файловым потоком (, например):
-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.