Это домашнее задание, в котором пользователь взаимодействует с базой данных людей, у которых есть такие данные, как номер, название улицы и т. Д., Какие данные находятся в текстовом файле.
Некоторые пункты меню требуют, чтобы программа считывала эти данные или манипулировала ими, например, опция «Отображение». Я сделал это, открыв 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;
};
Ты читаешь nombreResid
элементы в памяти, но ваш буфер resident tabRes1[nombreResid-1]
есть место только для nombreResid-1
Предметы.