【发布时间】:2014-04-01 18:43:04
【问题描述】:
我正在尝试使用 ifstream 从 .out 文件中读取一系列浮点数,但如果我之后输出它们,它们是不正确的。
这是我的输入代码:
float x, y, z;
ifstream table;
table.open("Resources/bones.out");
if (table.fail())
{
cout << "Can't open table" << endl;
return ;
}
table >> x;
table >> y;
table >> z;
cout << x << " " << y << " " << z << endl;
table.close();
我的输入文件:
0.488454 0.510216 0.466979
0.487242 0.421347 0.472977
0.486773 0.371251 0.473103
...
现在进行测试,我只是将第一行读入 x y 和 z,我的输出是
1 0 2
关于为什么我没有得到正确输出的任何想法?
【问题讨论】:
-
它工作正常,我刚刚测试过。打印“0.488454 0.510216 0.466979”。因此,您未显示的代码可能有问题。发布一个完整的、可编译的示例。还请告诉我们您的编译器以及您是如何调用它来编译代码的。
-
我不能 100% 确定
fail()会告诉你是否无法打开文件。流上的错误标志有点繁琐。我认为在使用[io]fstream之前检查它的状态的“最佳”方法就是if (!myStream) // something went wrong。 -
if (table >> x >> y >> z) {...} else { std::cout << "failed to read x,y,z"; } -
@WhozCraig 或者更好的是,先用 std::getline 读一整行,然后在行上使用 std::istringstream 来获取各个标记,这样就可以产生更精确的错误消息:)
-
是因为我错误地读取了 .out 文件,还是我假设它与 .txt 文件的读取方式相同?