使用相同的文件对象顺序写入和读取文件

时间:2018-01-27 15:52:43

标签: c++ file-io file-handling turbo-c++ data-files

我正在学习c ++中的数据文件处理基础知识(并且正在使用编译器turbo C ++)。  所以我想创建一个文本文件,在其上写入一些数据然后读取它。 所以我写了这个: -

int main()
{
fstream fin;
fin.open("textfile.txt",ios::in|ios::out);
for(int i=0;i<3;i++)
{
char x;
cin>>x;
fin<<x;
}
fin.seekg(0,ios::beg); //I added this and also tried seekp() when I didn't get the desired output
                   //but to no use 
while(!fin.eof())
{
char v;
fin>>v;
cout<<v;
}
fin.close();
getch();
return 0;
}

但它不输出我输入的3个字符,而是输出4个字符。 我尝试删除循环并获取输入并逐个输出(除其他外):

...
char x,y,z;
cin>>x>>y>>z;
fin<<x<<y<<z; 
fin.seekg(0,ios::beg);
char q,w,e;
fin>>q>>w>>e;
cout<<q<<w<<e;
...

但它仍然无效。

我认为它与文件指针及其位置有关,但不知道是什么。我尝试在网上找到类似的问题,但无济于事。

所以我想知道我做了什么有什么问题,以及如何改进这个以实际使用相同的文件对象顺序写入和读取文件(如果可能的话)。在这里甚至需要seekg()吗?

感谢。

1 个答案:

答案 0 :(得分:0)

您遇到的问题是一个普遍的问题。您输入的代码是正确的,并且没有错误。问题出在您的输出代码,更具体地说,是while(!fin.eof())行。 eof(文件结尾)适用于文件标记结尾,其数字值通常为-1。但是,仅当遇到并遍历结束字符时,此函数才会为假。要消除此错误,只需将该语句替换为read语句,即可将fin>>v行从循环语句移至条件语句。在这种情况下,当遇到结束字符时将为假。