函数应该创建Complex(我的结构)矢量,然后将其保存到二进制文件并从二进制文件读取它。问题在于它只读取第一行。
结构很好。除了阅读外,其他所有东西都运行良好。这些是读写功能:
void saveVectorBin(vector<Complex> &v, const string filename) {
ofstream output;
output.open(filename, ios::binary);
if (output)
{
for (auto i: v) {
output.write(reinterpret_cast<char*> (&i), sizeof(i));
output << endl;
}
cout << "Wektor zapisany do pliku " << filename << endl;
output.close();
}
else cout << endl << "BLAD TWORZENIA PLIKU BIN" << endl;
}
vector<Complex> readComplexVectorBin(const string &filename) {
vector<Complex> v;
ifstream input;
input.open(filename, ifstream::binary);
if (input) {
Complex line;
while (input.read(reinterpret_cast<char*> (&line), sizeof(Complex))) {
v.push_back(Complex(line));
}
input.close();
}
else cout << endl << "BLAD ODCZYTU PLIKU" << endl;
return v;
}
应显示:
26.697 + 7.709i
20.133 + 23.064i
9.749 + 8.77i
相反,它显示:
26.697 + 7.709i
1.43761e-57 + 1.83671e-43i
1.26962e+306 + -2.39343e-259i
答案 0 :(得分:1)
您的问题是您要在二进制文件中插入换行符。
output << endl;
将数据添加到您的文件中
while (input.read(reinterpret_cast<char*> (&line), sizeof(Complex))) {
v.push_back(Complex(line));
}
没有考虑在内。您要么需要在编写循环中摆脱output << endl;
(最简单的解决方案),要么在阅读循环中读取并丢弃换行符(最困难的解决方案)。