【发布时间】:2015-06-21 19:01:12
【问题描述】:
C++ 有一个称为“固定”的 I/O 操纵器,用于以固定(非科学)形式输入/输出浮点数。它适用于输出,但我不明白如何让输入正常工作。
考虑这个例子:
#include <sstream>
#include <iostream>
using namespace std;
int main() {
double value;
istringstream("1.4e1") >> fixed >> value;
cout << value << endl;
}
在我看来,它应该像这样工作。输入流有一些字符串。当我们在其上应用fixed 操纵器并尝试读取双精度/浮点数时,它应该停在不是数字或点的第一个字符上(不接受第二/第三/更多次点)。所以,正确的输出应该是1.4(当我们遇到'e'时我们会停止处理输入)。
相反,此代码输出14。为什么?它是如何工作的,fixed 用于输入流的目的是什么?如何从输入流中读取双精度并在 'e' 处停止(将其保留在输入流中)?
【问题讨论】:
-
std::fixed对输入流没有任何用途。算术格式化操纵器都不适用于输入流。 -
@0x499602D2 好的,谢谢。解决方案呢?是否有任何简单的方法(无需编写解析器)来读取双精度,将
e留在输入流中? -
显然没有简单的方法。我正在查看提取器的代码,似乎没有办法阻止解析器使用
e或E。您必须将其读入字符串并自己解析。 -
@0x499602D2,你能发表你的评论作为答案吗?
标签: c++ input io inputstream