我正在将数组结构(因子是结构)写入二进制文件,如下所示:
factor factors[100];
ofstream fa("Desktop:\\fa.dat", ios::out | ios::binary);
fa.write(reinterpret_cast<const char*>(&factors),sizeof(factors));
fa.close();
我运行程序并在其中保存5条记录。在另一个文件中,我想阅读结构,所以我写了这个:
int i=0;
ifstream a("Desktop:\\fa.dat", ios::in | ios::binary);
factor undelivered_Factors[100];
while(a && !a.eof()){
a.read(reinterpret_cast<char*>(&undelivered_Factors),sizeof(undelivered_Factors));
cout<<undelivered_Factors[i].ID<<"\t"<<undelivered_Factors[i].total_price<<endl;
i++;
}
a.close();
但是在阅读并打印了保存的因子之后,它会在数组中读取并显示它们中的第一个。为什么?我该怎么办?
答案 0 :(得分:1)
ofstream :: write和:: read的第二个参数是 bytes 中的写入内存大小(又名&#39; char&#39;在C \ C ++中),这是对的 - 你&# 39;立即重写整个数组。在阅读过程中,你混淆了每个元素和数组处理。 期望读取整个数组,然后打印一个值,然后你读取另外100个记录中没有的记录,我猜想。 eof()也只在你尝试阅读时失败。如果你站在文件末尾,eof()没有被触发,这就是你打印两张记录的原因。
答案 1 :(得分:0)
您正在单次调用中完成读取,因此您的循环只运行一次,因此它将仅输出第一个struct值。像这样改变你的while循环:
if(a)
{
a.read(reinterpret_cast<char*>(&undelivered_Factors),sizeof(undelivered_Factors));
}
for(int i=0; i<100; ++i)
{
cout<<undelivered_Factors[i].ID<<"\t"<<undelivered_Factors[i].total_price<<endl;
}