【问题标题】:C++ filereader giving errorC ++文件阅读器给出错误
【发布时间】:2011-12-19 20:16:30
【问题描述】:

我从网站上获得了 C++ 文件阅读器的代码,但我似乎无法让它为我工作,代码有问题还是我应该使用其他东西从文本文件中读取文本?

我得到的错误是:

E:\IT-C++\snake.cpp||在函数'int main()':| E:\IT-C++\snake.cpp|11|error: 无法将 'infile.std::basic_ios<_chart _traits>::eof [with _CharT = char, _Traits = std::char_traits]' 转换为 'bool '| E:\IT-C++\snake.cpp|11|错误:在一元的参数中!| ||=== 构建完成:2 个错误,0 个警告 ===|

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main ()
{
        string STRING;
    ifstream infile;
    infile.open ("names.txt");
        while(!infile.eof) // To get you all the lines.
        {
            getline(infile,STRING); // Saves the line in STRING.
            cout<<STRING; // Prints our STRING.
        }
    infile.close();

}

【问题讨论】:

  • 无论你在哪个网站上找到它,都远离它。在读取之前检查eof()是一个错误。

标签: c++


【解决方案1】:

标准的逐行文件读取习语是这样的:

std::string line;
std::ifstream infile("names.txt");

while (std::getline(infile, line))
{
  std::cout << "We read: " << line << std::endl;
}

无需显式关闭文件,因为当infile 超出范围时会自动完成。请注意,我们从不说 eof,因为这不是您想要的!

【讨论】:

    【解决方案2】:

    应该是

    while (getline(infile,STRING)) { // Saves the line in STRING.
        cout<<STRING; // Prints our STRING.
    }
    

    直到您尝试读完但未能读完之后,才会设置诸如 eof 之类的错误标志。当getline 失败时,设计的代码(即使添加了infile.eof() 中缺少的括号)将在最终迭代中处理垃圾。所以你必须在getline 运行后测试流状态,正如我在这里展示的那样。

    【讨论】:

      【解决方案3】:

      eof 是一个函数,所以你必须把它写成

      infile.eof()
      

      或者你可以将getline置于while条件

      while( getline(infile,STRING))
      

      【讨论】:

        【解决方案4】:
        while(!infile.eof() )
                      // ^^  missed. It's a member function of input output stream
        

        您应该根据打开文件的成功,即成员函数ifstream::is_open()的返回值开始阅读。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多