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循环浏览文件后,位置位于我的流的末尾,所以当我尝试为其添加名称时,没有'在流中留下的任何房间?
你的猜测是正确的.
最后一次调用getline()(失败的那个)会在您的流上设置错误标志,这将导致任何进一步的IO尝试失败,这就是您的文件中实际没有写入任何内容的原因.
您可以在读取循环后重置错误标志 clear():
myfile.clear();
Run Code Online (Sandbox Code Playgroud)
注意:
您还应该测试上次getline()通话的返回值.
| 归档时间: |
|
| 查看次数: |
767 次 |
| 最近记录: |