【问题标题】:Why is getline (from a file) to cout (that line) not printing the line?为什么 getline (来自文件)到 cout (该行)不打印该行?
【发布时间】:2019-03-03 13:53:07
【问题描述】:

这是我的代码。

ifstream inFile;
ofstream outFile;

string line, line2;

inFile.open("DATA.txt");
outFile.open("DATA.txt");

getline(inFile, line);
cout << line;
getline(inFile, line2);
cout << line2;

getline(cin, line);
getline(cin, line2);

outFile << line << "\n" << line2;

据我了解, getline(inFile, line) 应该将我的文本文件的第一行分配给一个名为 line 的字符串。然后 cout

我可以使用 getline(cin, line) 和 outFile 很好地输入。文件已更新,我可以看到我在其中输入的内容,但它无法正确读取和打印这些行。

p.s 这是我的第一个问题,我不完全确定如何在标题中提问,所以我愿意接受批评。

【问题讨论】:

  • 也许它没有读取你的文件,因为你把它放在了错误的文件夹中。
  • 为什么要打开同一个文件两次?为什么不打开一次阅读和写作?
  • 在尝试阅读之前,请务必确保您的文件 is_open()
  • 您应该在打开和读取文件后检查错误。这将为您提供可能出现问题的线索。
  • 默认情况下打开文件进行输出会删除文件内容(截断)。这就是我的猜测,为什么这没有达到你的预期。在读取文件内容之前删除文件。

标签: c++ file output cout getline


【解决方案1】:

在大多数平台上,std::cout 通常会缓冲输出数据,并且在输出换行符或显式刷新缓冲区之前不会刷新到控制台。

尝试使用:

cout << line << '\n';

或者:

cout << line << endl;

如果您不想输出换行符,请使用:

cout << line << flush;

【讨论】:

  • 程序退出时缓冲区会被刷新,所以他最终应该会看到输出。
  • 最终,但在 OP 的情况下可能暂时不会发生,我们不知道,因为没有提供完整的程序。
【解决方案2】:

所以我想通了。当我有

inFile.open("DATA.txt");
outFile.open("DATA.txt");

我认为 outFile.open 覆盖了 inFile.open,只导致输出部分工作。 只需将 outFile.open 移到输出部分之前,而不是在一切解决此问题之前。我确信我的代码还有其他一些草率的地方,但它已经修复到实际工作的地步。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 2022-11-01
    • 2017-01-08
    • 2016-10-20
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    相关资源
    最近更新 更多