Как сохранить структуру данных в бинарный файл с помощью рекурсии, а потом восстановить структуру из этого же файла?

Рейтинг: 0Ответов: 1Опубликовано: 26.03.2023

Я имею структуру, которая хранит номер аудитории, кафедру этой аудитории и количество компьютеров в ней:

typedef struct Cabinet{
    int numAuditory;
    string facultet;
    int PCnumber;
    Cabinet* next;
}TCabinet;

Требуется написать 2 функции: одна должна сохранять данную структуру в бинарный файл с помощью рекурсии, а вторая должна восстанавливать структуру из этого файла в память также с помощью рекурсии (если это возможно). Помогите мне, пожалуйста, разобраться!

Ответы

▲ 1Принят

Ну, если очень хочется рекурсивно, то примерно так можно (просто намек, не готовая программа):

struct Cabinet
{
    int numAuditory;
    string facultet;
    int PCnumber;
    Cabinet* next;
};

void writeCab(ostream& os, Cabinet* C)
{
    os.write((char*)&C->numAuditory,sizeof(int));
    os.write((char*)&C->PCnumber,sizeof(int));
    size_t len = C->facultet.size();
    os.write((char*)&len,sizeof(len));
    os.write(C->facultet.c_str(),len);
    int next = (C->next != nullptr);
    os.write((char*)&next,sizeof(int));
    if (C->next) writeCab(os,C->next);
}

Cabinet * readCab(istream& is)
{
    Cabinet* C = new Cabinet;
    is.read((char*)&C->numAuditory,sizeof(int));
    is.read((char*)&C->PCnumber,sizeof(int));
    size_t len;
    is.read((char*)&len,sizeof(len));
    C->facultet.resize(len);
    is.read(C->facultet.data(),len);
    int next;
    is.read((char*)&next,sizeof(int));
    if (next) C->next = readCab(is); else C->next = nullptr;
    return C;
}

Поочередно пишем и читаем потом в том же порядке. Строку обрабатываем особо, next для понимания, последний ли в цепочке или нет...

Файлы не забудьте открывать в бинарном режиме.