Привет, я откровенно новичок в этих форумах, поэтому я пытался искать как можно больше, но не мог найти ничего, что могло бы быть связано с моей проблемой.
Я пытаюсь прочитать узлы, которые я сохранилв файл и вставьте их в связанный список, который я создал
Функции вставки работают отлично, однако при загрузке, когда я пытаюсь вставить узел, 1.it вставляет узел
2.читает новый узел
3. поскольку я использую указатель, указатель теперь указывает на новый узел чтения
4. вставляет вновь прочитанный узел из файла в список, перезаписывая старыйdata.
Это приводит к тому, что мои старые данные полностью теряются, а новый узел выступает в качестве заголовка файла
функция загрузки:
void load_file_students(linked_student &students)
{
node_student *test = new node_student;
ifstream stu_list("students.dat",ios::binary);
stu_list.read((char*)test, sizeof(*test));
while (!stu_list.eof())
{
//students.insert_node_list(test);
students.insert_node_list(test);
stu_list.read((char*)test, sizeof(*test));
}
stu_list.close();
}
функция insert_node:
void linked_student::insert_node_list(node_student *student)
{
node_student* temp = new node_student;
temp = student;
if (head == NULL)
{
head = temp;
}
else
{
node_student *ptr = this->head;
while (ptr->next != 0)
{
ptr = ptr->next;
}
temp->previous = ptr;
ptr->next= temp;
}
}
узел:
#pragma once
#include <string>
using namespace std;
static int roll_number = 1; // used for the personal identification of the student
class node_student
{
public:
bool fees_paid = true;
string name;
float CGPA;
int ID; // same as the static roll_number provided
int semester;
string department;
string elective_subjects[5];
node_student *next;
node_student *previous;
node_student();
~node_student();
};
в режиме отладки очевидно, что когда я перечитываю данные в функции загрузки во время
stu_list.read((char *) test, sizeof (* test));
itтакже перезаписывает старые данные в функции вставки, даже если она вызывается перед этой строкой.
Еще раз вставка в файл работает отлично, я действительно вижу значения, загружаемые через режим отладки, здесьфункция вставки для справки
INSERT:
void update_student_file(linked_student testing)
{
node_student *temp = testing.head;
ofstream stu_list("students.dat",ios::binary);
while (temp != NULL)
{
stu_list.write((char*)temp, sizeof(*temp));
temp = temp->next;
}
stu_list.close();
}