【问题标题】:eof problem c++eof 问题 c++
【发布时间】:2011-08-11 11:56:01
【问题描述】:

我在 windows xp 上使用 Dev C++

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

int main ()
{
    string STRING;
    ifstream infile;
    infile.open ("sample.txt");
        while(!infile.eof)
        {
            getline(infile,STRING); 
            cout<<STRING; 
        }
    infile.close();

    return 0;
}

此代码给出以下错误

C:\C++\read.cpp: In function `int main()':

C:\C++\read.cpp:11: error: could not convert `infile.std::basic_ios<_CharT, _Traits>::eof [with _CharT = char, _Traits = std::char_traits<char>]' to `bool'
C:\C++\read.cpp:11: error: in argument to unary !

我不确定这里出了什么问题我无法编译代码 请帮忙

【问题讨论】:

  • 与您的问题没有直接关系,但 Dev-C++ 确实已经过时了。尝试将 Code::Blocks 与 MingW 或 Visual Studio Express 一起使用
  • 感谢@Firas Assaad 的建议,我用过visual studio express,但它会减慢我可怜的电脑,我会试试code::blocks

标签: c++ fstream eof dev-c++


【解决方案1】:

如果您将循环更改为

  while(getline(infile,STRING))
  {
     cout<<STRING; 
  }

您避免了两次读取最后一个值的可能性(请参阅this SO post)。

【讨论】:

  • 如果我使用 get() 来读取像 infile.get() 这样的单个字符,那么如何在不使用 infile.eof() 的情况下控制循环?
  • @user721776:只要将结果分配给int (std::istream::int_type) 而不是char (std::istream::char_type),那么在所有合理的平台上,您都可以可靠地测试@ 987654327@ (std::istream::traits_type::eof()) 作为你的循环条件。
  • @user721776 infile.get() 不带参数返回一个 int,您可以针对 EOF 进行测试。相比之下,infile.get(c)(其中 c 是一个字符)返回一个 istream 对象,您可以在 while 循环条件中检查它是否为空,就像使用 getline 一样。
【解决方案2】:

std::ifstream::eof 是一个返回布尔值的函数。所以你必须这样称呼它

infile.eof()

【讨论】:

  • 请不要建议使用.eof() 作为循环条件。它几乎总是不正确的。
【解决方案3】:

您忘记了eof 后面的()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 2016-09-14
    • 1970-01-01
    • 2022-07-08
    • 1970-01-01
    相关资源
    最近更新 更多