Struktury i wskaźniki

0

Mam do napisania program zawierający struktury. Mam za zadanie stworzyć funkcję typu void o nazwie getKsiazka wywoływaną z parametrem typu Ksiazka i wypisującą komunikat (jak niżej). Mój problem polega na tym, że nie za bardzo wiem jak użyć wskaźnika na "autor" i program się wysypuje.

 struct Pisarz
{
    int rok_urodzenia;
    char imie[12];
    char nazwisko[20];
};
struct Ksiazka
{
    char tytul[20];
    int rok_wydania;
    Pisarz* autor;
};
void getKsiazka(Ksiazka p)
{
    cout<<"Tytul: "<<p.tytul<<" - "<<"rok wydania "<<p.rok_wydania<<", autor: ";
    cout<<p.autor->imie<<" "<<p.autor->nazwisko<<", urodzony w "<<p.autor->rok_urodzenia<<" roku."<<endl;
}
0

Ogólnie całość wygląda tak: (dane wpisane dla przykładu)

#include <cstdlib>
#include <iostream>
#include <cstring>
 
using namespace std;
 
struct Pisarz
{
    int rok_urodzenia;
    char imie[12];
    char nazwisko[20];
};
struct Ksiazka
{
    char tytul[20];
    int rok_wydania;
    Pisarz* autor;
};
Pisarz set1(int t,char z[],char y[])
{
    Pisarz i;
    i.rok_urodzenia=t;
    strcpy(i.imie, z);
    strcpy(i.nazwisko, y);
    return i;
}
Ksiazka set2(char z[],int t)
{
    Ksiazka i;
    strcpy(i.tytul, z);
    i.rok_wydania=t;
    return i;
}
void getPisarz(Pisarz p)
{
    cout<<p.imie<<" "<<p.nazwisko<<", urodzony w "<<p.rok_urodzenia<<" roku."<<endl;
}
void getKsiazka(Ksiazka p)
{
    cout<<"Tytul: "<<p.tytul<<" - "<<"rok wydania "<<p.rok_wydania<<", autor: ";
    cout<<p.autor->imie<<" "<<p.autor->nazwisko<<", urodzony w "<<p.autor->rok_urodzenia<<" roku."<<endl;
}
 
int main()
{
  Pisarz Autorzy[3];
  for(int i=0;i<3;i++)
  Autorzy[i]=set1(1963,"Henryk","Sienkiewicz");
  Ksiazka tab[4];
  for(int i=0;i<4;i++)
  tab[i]=set2("Krzyzacy",1970);
  for(int i=0;i<3;i++)
  getPisarz(Autorzy[i]);
  cout<<endl;
  for(int i=0;i<4;i++)
  getKsiazka(tab[i]);
    return 0;
}
 
0

W getKsiazka odwołujesz się do autora a go przecież nie ustawiasz. Ustawiasz dla książki tytuł i rok wydania.

0

Wiem, że powinienem go ustawić, ale próbowałem na różne sposoby i nic nie chce działać.

0

WIdzę, że nie używasz wskaźników (poza tym jednym miejscem, gdzienie wiesz jak użyć), więc obawiam się, że jeszcze nie umiesz ich używac, proponuje wrócić do literatury i poczytać o wskaźnikach i dopiero wtedy wrócić do tego zadania.

1
Ksiazka set2(char z[],int t, Pisarz *a)
{
 // ...
 i.autor = a;
 // ...
}

tab[i]=set2("Krzyzacy",1970, &Autorzy[0]);

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