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

Writing and reading from a file sequentially using the same file object

本文关键字:文件 顺序 读取 对象      更新时间:2023-10-16

我正在学习 c++ 中的数据文件处理基础知识(并且正在使用编译器涡轮增压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(( 吗?

谢谢。

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