Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将结构数组写入二进制文件并再次读取?_C++_Arrays_File_Struct - Fatal编程技术网

C++ 如何将结构数组写入二进制文件并再次读取?

C++ 如何将结构数组写入二进制文件并再次读取?,c++,arrays,file,struct,C++,Arrays,File,Struct,我正在将数组af structures(factor是一个结构)写入一个二进制文件,如下所示: factor factors[100]; ofstream fa("Desktop:\\fa.dat", ios::out | ios::binary); fa.write(reinterpret_cast<const char*>(&factors),sizeof(factors)); fa.close(); if(a) { a.read(reinterpret_ca

我正在将数组af structures(factor是一个结构)写入一个二进制文件,如下所示:

factor factors[100];

ofstream fa("Desktop:\\fa.dat", ios::out | ios::binary);
fa.write(reinterpret_cast<const char*>(&factors),sizeof(factors));

fa.close();
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;
}
因子[100];
流fa(“桌面:\\fa.dat”,ios::out | ios::binary);
fa.写入(重新解释铸件和系数)、尺寸(系数);
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();
inti=0;
ifstream a(“桌面:\\fa.dat”,ios::in | ios::binary);
未交付因子_因子[100];
while(a&!a.eof()){
a、 读取(重新解释铸件和未交付系数)、尺寸(未交付系数);

coutofstream::write and::read的第二个参数是以字节为单位的写入内存大小(在C\C++中称为“char”),这是正确的-您正在一次写入整个数组。在读取过程中,您将每个元素和数组处理混合在一起。您希望读取整个数组,然后打印一个值,然后读取另外100条文件中没有的记录,我猜。还有eof()仅当您尝试读取但失败时才会发生。如果您站在文件末尾,则不会触发eof(),这就是为什么会打印两条记录。

您在单个调用中执行完全读取,因此循环只运行一次,因此它将只输出第一个结构值。按如下方式更改您的while循环:

factor factors[100];

ofstream fa("Desktop:\\fa.dat", ios::out | ios::binary);
fa.write(reinterpret_cast<const char*>(&factors),sizeof(factors));

fa.close();
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;
}
if(a)
{
a、 读取(重新解释铸件和未交付系数)、尺寸(未交付系数);
}

对于(int i=0;我只需调用一次
read()
。我应该怎么做才能只读取数组中记录的值?