Im писать вектор размера три, и когда я прочитал я получить вектор размера 4 с последним индексом является дубликатом индекса 2.с ++ я получить дублированную информацию, когда я прочитал двоичный файл
Heres моего код.
void IOManager::WriteBin(const string &filename, vector<userRank> highScorers, int rank) {
ofstream fsalida(filename, ios::out | ios::binary);
if (fsalida.is_open())
{
for (int i = 0; i < highScorers.size();i++) {
fsalida.write(reinterpret_cast<char*>(&highScorers[i]), sizeof(highScorers[i]));
}
//highScorers.size() is 3
fsalida.close();
}else cout << "Unable to open file for writing\n";
}
vector<userRank> IOManager::ReadBin(const string &filename) {
ifstream fentrada(filename, ios::in | ios::binary);
if (fentrada.is_open())
{
vector<userRank>bestPlayers;
for (int i = 0; fentrada.good(); i++) {
userRank tempUser;
fentrada.read(reinterpret_cast<char*>(&tempUser), sizeof(tempUser));
bestPlayers.push_back(tempUser);
}
//bestPlayers.size() is 4!!!!!! Im losing my mind
fentrada.close();
return bestPlayers;
}
else cout << "Unable to open file for reading\n";
}
Вот мой UserRank структура
struct userRank
{
char userName [5];
int score;
};
дикий userRank apperars по какой-то причине, знает кто-нибудь, почему?
Я не уверен, что именно вы хотите. И вы не отправили мне все необходимое для понимания вашего кода. Но я подумаю, что вы должны это прочитать: [Почему «while (! Feof (file))« всегда неправильно? »(Http://stackoverflow.com/questions/5431941/why-is-while- feof-файлы всегда-неправильно). – giusti
Это не проблема, но вызовы 'fsalida.close()' и 'fentrada.close()' не нужны. Деструктор потока закроет файл. –
В первом цикле гарантировано, что вы пишете элементы 'highScorers.size()', но в цикле чтения вы выполняете цикл в зависимости от состояния флага потока. Почему бы не провести эксперимент и не прочитать то же количество данных, которые вы написали, с помощью жесткого кодирования второго цикла с количеством элементов. – PaulMcKenzie