读取文本文件显示到控制台然后附加文本文件

Bra*_*don 1 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;
}
Run Code Online (Sandbox Code Playgroud)

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

我最好的猜测是,我认为这可能与以下事实有关:在使用getline循环浏览文件后,位置位于我的流的末尾,所以当我尝试为其添加名称时,没有'在流中留下的任何房间?

qua*_*dev 6

你的猜测是正确的.

最后一次调用getline()(失败的那个)会在您的流上设置错误标志,这将导致任何进一步的IO尝试失败,这就是您的文件中实际没有写入任何内容的原因.

您可以在读取循环后重置错误标志 clear():

myfile.clear();
Run Code Online (Sandbox Code Playgroud)

注意:

您还应该测试上次getline()通话的返回值.