gpt4 book ai didi

c++ - 如何在 C++ 中正确读取和写入二进制文件中的对象

转载 作者:行者123 更新时间:2023-11-28 07:42:13 25 4
gpt4 key购买 nike

下面是我的超市结算和股票编辑程序的基本结构代码类:

class Admin
{
public:
admin();
private:
int Pid;
char name[20];
double quant;
double price;
double disc;
double net_price;

friend istream &read(istream&, Admin&);
friend ostream &show(ostream&, const Admin);
};

istream &read(istream&, Admin&);
ostream &show(ostream&, const Admin);

友元函数的定义:

istream &read(istream &is, Admin &commodity)
{
double dis;

fflush(stdin);
is>>commodity.Pid;

is.getline(commodity.name,30);

is>>commodity.quant
>>commodity.price
>>commodity.disc;

dis=grs_pr*(commodity.disc/100);

commodity.net_price=grs_pr-dis;

return is;
}

ostream &show(ostream &os, const Admin thing)
{
os << thing.name <<" " << thing.quant <<" "
<< thing.price <<" " << thing.disc <<" "
<< thing.net_price << endl;

return os;
}

主要功能:

int main()
{
admin item;

while(read(cin,item)
{
ofstream file;
file.open("Stock.dat",ios::binary | ios::app);
file.write(reinterpret_cast<const char*>(&item),sizeof(Admin));
}
ifstream readFile("Stock.dat",ios::in|ios::binary);

while(!readFile.eof())
{
readFile.read(reinterpret_cast<char*> (&item),sizeof(Admin));
Admin readedItem;
read(readFile,readedItem); /*i have used read and show function to watch the values that are read by readFile but every time show function output some five exponential values like 5.23689e-301*/
show(cout,readedItem);
}

return 0;
}

请告诉我上面的代码有什么问题,我应该怎样改正它,我的动机是从创建的文件中读取并通过用户提及产品 ID 来更改或编辑要选择的项目的数据,请帮助我如何实现此功能。

最佳答案

你不应该自己实现一个简单的序列化。使用图书馆。

参见即答案 1 , 2+comments , 3 , 4

此外,不要将数据操作逻辑(即 commodity.net_price=grs_pr-dis;)放在数据序列化中

关于c++ - 如何在 C++ 中正确读取和写入二进制文件中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15585316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com