1

我有一个非常简单的代码,但我无法找出错误。任务:我想读取包含浮点/双精度值的文本文件。文本文件如下所示:

--datalog.txt--

3.000315
3.000944
3.001572
3.002199
3.002829
3.003457
3.004085
3.004714
3.005342
3.005970
3.006599
3.007227
3.007855
3.008483
3.009112
3.009740
3.010368
3.010997

代码看起来像这样

--dummy_c++.cpp--

#include <iostream>
#include <fstream>
#include <stdlib.h> //for exit()function
using namespace std;

int main()
{
  ifstream infile;
  double val;

  infile.open("datalog");

  for (int i=0; i<=20; i++)
    {
      if(infile >> val){
    cout << val << endl;
      } else {
    cout << "end of file" << endl;
      }
    }
  return 0;
}

输出如下所示:

end of file
end of file
end of file
end of file
end of file
end of file
end of file
end of file
end of file
end of file
end of file
end of file
end of file
end of file
end of file
end of file
end of file
end of file
end of file
end of file
end of file

正如我所期望的那样,它将与 datalog.txt 文件的打印相同。

你能帮我找出错误吗?

谢谢,米林德。

4

6 回答 6

3

如果你的文件真的被调用datalog.txt了,你应该确保你尝试打开它:

infile.open("datalog.txt");
//                  ^^^^^^

如果您没有完整路径,exe 将在当前目录中查找它。

于 2013-09-06T13:10:35.817 回答
2

您指定了要打开的错误文件;利用:

infile.open("datalog.txt");

您可以通过一个简单的测试来防止尝试使用未打开的文件:

infile.open("datalog.txt");
if (infile) {
    // Use the file
}
于 2013-09-06T13:10:16.883 回答
1

难道是你只是拼错了文件名?您说该文件称为“datalog.txt”,但在代码中您打开“datalog”。

于 2013-09-06T13:11:25.293 回答
0

使用正确的文件名:-) 那么它对我有用。顺便说一句,“datalog”文件只有 18 行,而不是 20 行。

于 2013-09-06T13:13:19.553 回答
0

如您所说,文件名为"datalog.txt". 在您使用的代码中"datalog"。使用后还要始终检查流,以确保文件已正确打开:

int main()
{
    std::ifstream infile;
    double val;

    infile.open("dalatog.txt");

    if( infile )
    {
        for(unsigned int i = 0 ; i < 20 ; ++i)
        {
            if(infile >> val)
                std::cout << val << std::endl;
            else
                std::cout << "end of file" << std::endl;
        }
    }
    else
        std::cout << "The file was not correctly oppened" << std::endl;
}

此外,最好使用 while 循环而不是检查 EOF 的 for 循环:

while( infile >> val )
{
    std::cout << val << std::endl;
}
于 2013-09-06T13:18:19.963 回答
-1

也许使用 std::getline() 函数会更好

于 2013-09-06T13:23:25.020 回答