我有一个名字的文本文件。我想将文本文件读入流中,并将其显示到控制台。完成后,它会提示用户输入他们的姓名。然后它应该将其添加到文件中。
我可以让它分别做这两件事,但不能一起做。 这是我的代码。
#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/