Запись из txt в массив

Столкнулся с пробелом в своих знаниях, мне нужно из libary.txt содержимое записать в массив Libary Код:

#include <iostream>
#include <fstream>
#include <list>
#include <cstring> 

struct Book
{
    char Name[50];
    char Author[50];
    char Puplicator[50];
    char Janr[50];
};

char Libary[400];
void FillArr(std::fstream, char[]);

int main()
{

    std::fstream input("libary.txt"); // Открыли поток для чтения из файла
    setlocale(0, "");
}
void FillArr(std::fstream txt, char Libary[])
{
    Book book;
    while (!txt.eof())
    {
        txt >> book.Name >> book.Author >> book.Puplicator >> book.Janr;
    }
}

Вот такой "скелет" вроде как должен быть


Ответы (1 шт):

Автор решения: Kabanikov

Немного подумав, сделал так и все работает) Также хочу сказать спасибо всем за помощь.

#include <iostream>
#include <fstream>
#include <list>
#include <cstring> 
#include <string>

struct Book
{
    std::string Name;
    std::string Author;
    std::string Puplicator;
    std::string Janr;
};
std::string filename = "расположение ФАЙЛА";
const int totalbooks = 10;
Book Libary[totalbooks];
bool ParseFile(std::string filename);
void EditBook(int, int);
char sep = ';'; // используемый разделитель 
const int num = 4; // кол-во информационных элементов в строке 

int main()
{
    setlocale(0, "");
    if (ParseFile(filename)) // загружаем и обрабатываем файл
    {
        std::cout << "Данные из файла были успешно загружены\n";

bool ParseFile(std::string filename)
{
    bool result = true;
    std::ifstream in;       // поток для чтения
    in.open(filename); // окрываем файл для чтения
    if (in.is_open()) // проверка на успешность открытия файла 
    {
        std::string line; // определяем переменную для хранения строки
        int readcounter = 0; //  кол-во обработанных строк
        while (getline(in, line)) // читаем в цикле все строки файла 
        {
            int pStart = 0; // значение индекса начала элемента 
            int pStop = 0; //  значение индекса разделителя 
            std::cout << line << std::endl; // выводим содержимое прочитанной строки
            if (sizeof(line) > 2) // проверка на минимум 3 разделителя 
            {
                Book book;
                for (int i = 0; i < num; i++)
                {
                    pStop = line.find_first_of(sep, pStart);
                    if (pStop == -1)
                        pStop = sizeof(line);

                    switch (i)
                    {
                    case 0: book.Name = line.substr(pStart, pStop - pStart);
                        break;
                    case 1: book.Author = line.substr(pStart, pStop - pStart);
                        break;
                    case 2: book.Puplicator = line.substr(pStart, pStop - pStart);
                        break;
                    case 3: book.Janr = line.substr(pStart, pStop - pStart);
                        break;
                    }

                    pStart = pStop + 1;

                }
                Libary[readcounter] = book;
                readcounter++;
            }
            if (readcounter >= totalbooks)
                break;
        }

    }
    else
    {
        result = false;
    }
    in.close();
    return result;
}





→ Ссылка