【问题标题】:EOF returning blank line or infinite loopEOF 返回空行或无限循环
【发布时间】:2013-07-31 08:37:32
【问题描述】:

所以我试图从一个名为input_file 的文件中读取,直到它到达末尾。我试过使用while (!input_file.eof()),但它会无限循环。我在论坛上环顾四周并尝试使用while (getline(input_file, line)),但这只会返回一个空行。我没有像其他问题那样同时使用 getline() 和 >> 运算符。 我该如何解决这个问题?这是我的代码:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

// Main program
void CalfFlac(ifstream& input_file) {
  string text;
  string line;
  while (getline(input_file, line)) {
    text += line;
  }
  cout << text << endl;
}

int main() {
  ifstream input_file;
  input_file.open("calfflac.in");

  CalfFlac(input_file);
}

input_file 包含一行Confucius say: Madam, I'm Adam.,后跟一个回车符。

感谢您的帮助!

PS:我希望解决方案保持简单,因为这似乎是一个非常简单的问题。

【问题讨论】:

  • 我无法重现您所描述的问题。甚至尝试使用各种行尾组合,如crlflfcr。你在什么平台下测试这个?
  • 您检查文件是否打开成功? assert(input_file);
  • 最好不要使用“assert”来检查文件,因为它们在发布模式下同样容易失败!

标签: c++ eof getline


【解决方案1】:

编辑:确保您拥有正确的文件名!我尝试了一个虚假的文件名,它打印了一个空行作为您的描述。 我用正确的文件名尝试了你的代码,它对我有用

在 main 添加这一行:

int main() {
  ifstream input_file;
  input_file.open("calfflac.in");

  if(!input_file)
    cout << "File path is wrong!";

  CalfFlac(input_file);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 2016-02-21
    • 2017-08-19
    • 1970-01-01
    相关资源
    最近更新 更多