Тема: Запис та зчитування структури в/з файлу
Зіткнувся за такою проблемкою. Є декілька ділянків коду.
Структура "Абонент":
struct Subscriber
{
char FIO [50];
int YearOfBirth;
char Town [20];
char Number [15];
Subscriber * left, * right, * parent;
};
А також клас Tree - бінарне дерево, яке сортує ці структури.
Клас Tree має метод SaveInFile () - збереження усіх записів в файл:
void Tree::SaveInFile (Subscriber * Node, FILE * F)
{
if(Node != 0)
{
SaveInFile (Node->left, F);
fwrite (Node, sizeof (Subscriber), 1, F);
SaveInFile (Node->right, F);
}
}
А також відповідний метод зчитування із файлу ReadOutFile ():
void Tree::ReadOutFile (FILE * F)
{
while (!feof (F))
{
Subscriber *Node = new Subscriber;
fread (Node, sizeof (Subscriber), 1, F);
Insert (Node); // вставляет указатель на считанную структуру в дерево
}
}
Метод SaveInFile в свою чергу викликається в функції SaveBase ():
Та віповідна функція ReadBase ():
Проблема в тому, що коли я зчитую послідовно записи із файлу, требя якимось чином закінчити зчитування, що зазвичай робиться за допомогою команди feof (), як тут:
while (!feof (F))
{
Subscriber *Node = new Subscriber;
fread (Node, sizeof (Subscriber), 1, F);
Insert (Node);
}
Але справа в тому, що дані до файлу записуються абсолютно всі, включно із невикористаними байтами із символьних масивів FIO, Town, Number. І в підсумку, після зчитування всієї необхідної інформації, він вкінці дописує решту сміття з файлу. Ну ось приклад.
1) Ввожу інфу:
2) Виводжу на екран:
3) Зберігаю в файл:
4) Зчитую із файлу:
5) Виводжу зчитану інформацію на екран:
Загалом я розумію причину, але не можу збагнути, як зробити, щоб зчитувалося все, без сміття. Записувати і зчитувати построково шляхом fputs () і fgets () якось нерозумно і накладно як на мене. Може я якось невірно описав функції запису і зчитування?