Struktura ze wskaźnikiem i zaczytanie do pliku

0

Witam mam pewien problem z zaczytaniem danych z pliku do programu.

#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdlib>

using namespace std;

struct Pisarz
{
    int rok_urodzenia;
    char nazwisko[20];
};

struct Ksiazka
{
    char tytul[50];
    int rok_wydania;
    char rodzaj[20];
    Pisarz *autor;
};

int main()
{
    Ksiazka ksiazki[10];
    int rozmiar_pliku=10;
    ifstream plik;
    plik.open("ksiazki.txt", ios_base::in);
        for (int i=0; i < rozmiar_pliku; i++)
        {
            plik.getline(ksiazki[i].tytul,50);
            plik >> ksiazki[i].rok_wydania;
            plik.get();
            plik.getline(ksiazki[i].rodzaj,20);
            plik >> (ksiazki[i].autor)->rok_urodzenia;                    //problem wysypuje się w tym momencie
            plik.get();
            plik.getline((ksiazki[i].autor)->nazwisko,20);              //zgaduje ze w tym również
        }
        plik.close();
    return 0;
}

Plik składa się z 10 składni:
tytuł
rok wydania
rodzaj
rok urodzenia autora
nazwisko autora

0

Musisz zaalokować sobie osobną strukturę danych na autorów, albo alokować nowego autora do każdej książki. Domyślnie wskaźnik na nic nie wskazuje, więc nie możesz go użyć aby coś pod nim zapisać.

0

Nowego autora do każdej książki, czyli coś takiego?

Pisarz pisarze[10];
plik >> ksiazki[i].autor->pisarze[i].rok_urodzenia;
1

Blisko, musisz w strukturze ustawić wskaźnik, a nie odwoływać się do innej zmiennej lokalnej.

Ale to i tak bez sensu, przecież musisz deduplikować autorów (J. K. Rowling, która napisała Harry'ego Pottera 1 to ta sama autorka, co J. K. Rowling, która napisała Harry'ego Pottera 2 - więc powinna być reprezentowana przez tę samą zmienną)

4

Dobrze by było jakbyś podzielił(a) kod na mniejsze funkcje. Napisz sobie funkcję, która wczytuje jeden rekord.

std::istream& loadBook(std::istream& in, Ksiazka& k)

Poza tym piszesz w C++, więc używaj std::string zamiast char [].

1 użytkowników online, w tym zalogowanych: 0, gości: 1