c++ - 读取文本文件显示到控制台然后追加文本文件

标签 c++ file-io iostream

我有一个名字的文本文件。我想将文本文件读入流中,并将其显示到控制台。完成后,它会提示用户输入他们的姓名。然后它应该将其添加到文件中。

我可以让它分别做这两件事,但不能一起做。 这是我的代码。

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>

using namespace std;
using namespace System;

int main(array<System::String ^> ^args)
{
 fstream myfile;
 string line;
 string name;
    myfile.open("Names.txt",ios::out | ios::in | ios_base::app);
    if (myfile.is_open())
    { 
      while( getline(myfile, line) )
      {
          cout << line << endl;
      }
     cout << "Enter your name!\n";
     getline (cin, name);
     myfile << name;
     myfile.close();
 }
 else
 {
     cout << "file was not opened\n";
 }

    return 0;
}

如果我将 while 循环保留在那里,它会将所有名称写入控制台,但不会将用户输入的名称附加到列表中。如果我取出 while 循环,我可以向文件添加一个名称,但当然我没有得到该文件中已有名称的列表。

我最好的猜测是,我认为这可能与以下事实有关:在我使用 getline 遍历文件后,该位置位于流的末尾,因此当我尝试向其添加名称时,流中没有剩余空间吗?

最佳答案

你的猜测是正确的。

getline() 的最后一次调用(失败的调用)在您的流上设置了错误标志,这将使任何进一步的 IO 尝试失败,这就是为什么实际上没有任何内容写入您的文件的原因。

您可以重置 errors flags with clear() 在你的阅读循环之后:

myfile.clear();

注意:

您还应该测试上次 getline() 调用的返回值。

关于c++ - 读取文本文件显示到控制台然后追加文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24262654/

相关文章:

c++ - 将 unique_ptr 的 vector 传递给函数,const 引用

c++ - 使用 std::vector<Eigen::MatrixXd> 进行内存管理

c - C 中未读取整个文件(意外出现 EOF)

c++ - 如何在 OpenCV 中将 Float Mat 写入文件

c - access 总是返回 -1,即使文件存在

ruby - 当程序等待 stdin 时,为什么 open4 无法从 stdout 读取数据?

c++ - 控制台输出不断崩溃

java - 构建解析器类的最佳方式

c++ - tictactoe 游戏没有运算符 "=="匹配这些操作数

c++ - CV - 自动变量的限定符