【发布时间】:2021-04-19 18:20:10
【问题描述】:
我的二进制代码已经卡了一个月了,我无法完成我的工作,因为这是我必须完成的最后一件事。 我有一个包含参赛者所有数据的结构。 我有一个功能,可以输入参赛者数据的价值,例如团队名称,团队家乡,团队成立日期等。 然后我有一个函数可以将该数据写入二进制文件,还有一个函数可以从二进制文件中读取该数据。
我的结构:
struct Team {
string teamName;
string teamHometown;
int foundedDay{};
int foundedMonth{};
int foundedYear{};
int matchPlayed{};
int matchLost{};
int goalsFor{};
int goalsAgainst{};
int goalDifference{};
int Points{};
};
我的读写功能:
void writeBinary(Team* T, int& contestantCount) {
Team Data;
ofstream File;
File.open("Data.bin", ios::binary | ios::out);
if (File.is_open()) {
File.write(reinterpret_cast<char*>(&Data), sizeof(Team));
File.close();
system("cls");
cout << "|--------------------------------------------------------------------------------------------|" << endl;
cout << " DATA SUCCESSFULLY SAVED TO BINARY FILE" << endl;
cout << "|--------------------------------------------------------------------------------------------|" << endl << endl;
system("pause");
}
else {
system("cls");
cout << "|--------------------------------------------------------------------------------------------|" << endl;
cout << " COULD NOT OPEN BINARY DATA FILE" << endl;
cout << "|--------------------------------------------------------------------------------------------|" << endl << endl;
system("pause");
}
}
void readBinary(Team* T, int& contestantCount) {
Team Data;
ifstream File;
File.open("Data.bin", ios::binary | ios::in);
if (File.is_open()) {
File.read(reinterpret_cast<char*>(&Data), sizeof(Team));
File.close();
system("cls");
cout << "|--------------------------------------------------------------------------------------------|" << endl;
cout << " SHOWING SAVED DATA FROM BINARY FILE" << endl;
cout << "|--------------------------------------------------------------------------------------------|" << endl << endl;
}
else {
system("cls");
cout << "|--------------------------------------------------------------------------------------------|" << endl;
cout << " COULD NOT OPEN BINARY DATA FILE" << endl;
cout << "|--------------------------------------------------------------------------------------------|" << endl << endl;
system("pause");
}
cout << Data.teamName << endl;
system("pause");
}
我假设我的 write 函数工作正常,因为它没有给我任何代码违规,我可以看到 .bin 文件是使用其中的内容创建的。 当我运行读取功能时,它给了我这个冲突,它给了我终端中的“读取访问冲突”。 这是我运行读取函数时控制台中的结果图片,以及在函数结束后它给我的违规图片。如果我有任何错误或至少向我解释一个替代方案,如果有人能帮我处理代码,我将不胜感激。我还在大学的第一个学期,我们还处于基础 C++ 水平。 Console output screenshot Violation screenshot
【问题讨论】:
-
你正在尝试的是object serialization,实现它并不像你的代码假设的那么简单。例如,写一个指针并不能保证该指针以后有效。
-
我会调查的。感谢您的帮助。