Последние данные отсутствуют в массиве объектов, прочитанных из текстового файла

Это домашнее задание, в котором пользователь взаимодействует с базой данных людей, у которых есть такие данные, как номер, название улицы и т. Д., Какие данные находятся в текстовом файле.

Некоторые пункты меню требуют, чтобы программа считывала эти данные или манипулировала ими, например, опция «Отображение». Я сделал это, открыв fstream и поместив данные во временный массив, который имеет для типа данных предварительно объявленный резидент структуры.

//reopen file
fstream listeResidents1;
listeResidents1.open("listeResidents.dat",ios::out|ios::in|ios::binary);

//Create a temporary array of objects resident for manipulation
resident tabRes1[nombreResid-1];

//Insertion des objets resident du registre dans le tableau temporaire
for (int h = 0;h < nombreResid;h++)
{
listeResidents1.seekg((h)*sizeof(resident));
listeResidents1.read(reinterpret_cast<char*>(&tabRes1[h]),sizeof(resident));
}

listeResidents1.close();

Моя функция Display () делает это ^^^, а затем использует за Цикл, чтобы пройти через каждый объект в массиве и отобразить все их атрибуты. Однако в самой последней записи в предпоследней строке отсутствуют некоторые символы, а в последней переменной — float, установленной в 0 (что означает, что она также была усечена), и я не могу понять, почему. У кого-нибудь есть идеи, почему это происходит?

Для наглядного примера последняя запись была успешно записана в файл со следующими атрибутами:

int numero: 4
[the other,correctly displayed attributes here]
char rue[30]: queen
float superf: 80

при отображении будет отображаться последняя запись

numero: 4
[the other,correctly displayed attributes here]
rue: que
superf: 0

Если я добавлю еще одну запись, она будет обрезана, а 4 теперь будет отображаться правильно …

Редактировать: вот структура.

struct resident
{
int numero;
char nom[30];
char prenom[30];
int numciv;
char rue[30];
float superf;
};

0

Решение

Ты читаешь nombreResid элементы в памяти, но ваш буфер resident tabRes1[nombreResid-1] есть место только для nombreResid-1 Предметы.

0

Другие решения


По вопросам рекламы [email protected]