C++ 读取和写入文件时出错

C++ 读取和写入文件时出错,c++,file,class,object,C++,File,Class,Object,该程序工作,但在开始ch=2时打印垃圾值,并打印相同的输出两次。 我在我的项目中使用它。它包含更多数据,在那里我使用单个对象而不是对象数组。它不起作用。数组中的每个对象存储一组数据 更改以下代码 cout<<r[i].n<<r[i].a; cout<<"\n"; f1.read((char*)&r[i],sizeof(r[i])); 不要在任何时候使用!f1.eof,它将不会像您期望的那样工作,因为只有在您尝试从文件之外读取之后,才会设置eofbit

该程序工作,但在开始ch=2时打印垃圾值,并打印相同的输出两次。 我在我的项目中使用它。它包含更多数据,在那里我使用单个对象而不是对象数组。它不起作用。数组中的每个对象存储一组数据

更改以下代码

cout<<r[i].n<<r[i].a;
cout<<"\n";
f1.read((char*)&r[i],sizeof(r[i]));
不要在任何时候使用!f1.eof,它将不会像您期望的那样工作,因为只有在您尝试从文件之外读取之后,才会设置eofbit标志。改为这样做,例如,当f1时。阅读


对于这样一个没有边界检查的循环也要小心。如果文件不正确,您可能会写入超出数组r的范围。

什么是不工作,请详细说明?程序崩溃了吗?它只是没有写出文件吗?这真的应该是一个评论,因为它没有回答问题请参见上面的@Mohit's答案。@cybermonkey这不是一个完整的答案,因为它回答了OPs的两个问题,因为Mohit的答案处理了另一个案例,但在我写这个答案时,它没有回答。它仍然不是答案,据我所知,OP只问了一个问题,实际上没有人问任何问题@cybermonkey在进行大量编辑之前给出了答案,回答了垃圾数据的问题。我的回答两次回答了有关打印的问题。这两个问题都在问题正文的第一句中提出。在我写下答案后,其他人编辑了他们的答案以包含我写的内容,这并不意味着我的答案无效。您已经在读了,所以不应该在循环中再次读。我删除了它。现在它崩溃了循环如何终止?它崩溃了,因为r数组的一侧不足。使其变大或不增加i。当无法从文件中读取更多数据时,循环终止。
cout<<r[i].n<<r[i].a;
cout<<"\n";
f1.read((char*)&r[i],sizeof(r[i]));
f1.read((char*)&r[i],sizeof(r[i])); // Moved before printing
cout<<r[i].n<<r[i].a;
cout<<"\n";
while(!eof) // true
read first data
print first data
while(!eof) // true
read second data  // read all, but was succesful and eof not set
print second data
while(!eof)  // true
Try to read // Could not read, eof set
print data // Reprinting second data
while(!eof) // false