【问题标题】:Writing and reading from a file sequentially using the same file object使用相同的文件对象按顺序写入和读取文件
【发布时间】:2018-07-06 17:56:46
【问题描述】:

我正在学习 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() 在这里甚至是必要的吗?

谢谢。

【问题讨论】:

  • 投反对票的人,想说明投反对票的原因吗?
  • 题外话:您的文件输入变量可能希望为finout,因为它既用于输入又用于输出。
  • @Thomas,但这是任意的,对吧?
  • 实际上,您希望使用有意义的名称,例如“test_data_file”或“experiment_io_stream”。记住要编码,这样你就可以在 6 个月不看它之后理解它(你忘记了你的程序是如何运行的或它应该做什么)。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 2013-11-20
    相关资源
    最近更新 更多