Witam! Mam do napisania program, który m.in. z pliku tekstowego będzie wyświetlał listę, czyli w tym przypadku dane o płytach dvd. Wszystko było by ok, gdyby nie to, że program nieprawidłowo wyświetla mi dane z pliku. Wydaje mi się, że to jest dlatego, że tytuł, dane o reżyserze i aktorach to nie jest jeden wyraz a kilka. Może zamiast typu char dać string i coś jeszcze pokombinować. Jak myślicie? Pomożecie mi trochę? Byłabym wdzięczna.
Tu są dane, jakie miałam w pliku dvd.txt :
Ogniem i mieczem
Jerzy Hoffman
Izabella Scorupco
Michał Żebrowski
Aleksandr Domogarow
1999
Pan Tadeusz
Andrzej Wajda
Bogusław Linda
Michał Żebrowski
Daniel Olbrychski
1999
Potop
Jerzy Hoffman
Daniel Olbrychski
Małgorzata Braunek
Tadeusz Łomnicki
1974
Pan Wołodyjowski
Jerzy Hoffman
Tadeusz Łomnicki
Magdalena Zawadzka
Daniel Olbrychski
1969
Cudowne dziecko
Kirsten Sheridan
Freddie Highmore
Keri Russell
Jonathan Rhys Meyers
2007
Katyń
Andrzej Wajda
Andrzej Chyra
Maja Ostaszewska
Artur Żmijewski
2007
Popiół i diament
Andrzej Wajda
Zbigniew Cybulski
Ewa Krzyżewska
Wacław Zastrzeżyński
1958
Skazani na Shawshank
Frank Darabont
Tim Robbins
Morgan Freeman
Bob Gunton
1994
Evan Wszechmogący
Tom Shadyac
Steve Carell
Morgan Freeman
Lauren Graham
2007
#include<iostream>
#include<fstream>
#include<stdlib.h>
#include<string.h>
using namespace std;
struct dvd
{char tytul[30];
char rezyser[30];
char aktor1[30];
char aktor2[30];
char aktor3[30];
int rok;};
typedef struct element
{ struct dvd p;
struct element *next;
}Element;
typedef Element *Lista;
Lista dodaj(struct dvd a, Lista b)
{
Lista p;
p=new Element;
p->p=a;
p->next=b;
return (p);
}
void wyswietl(Lista a)
{
cout<<"\n";
while(a)
{
cout<<(a->p).tytul<<endl;
cout<<(a->p).rezyser<<endl;
cout<<(a->p).aktor1<<endl;
cout<<(a->p).aktor2<<endl;
cout<<(a->p).aktor3<<endl;
cout<<(a->p).rok<<endl;
a=a->next;
cout<<"\n";
}
}
Lista dodaj_ost(struct dvd a, Lista b)
{
Lista p;
Lista pocz=b;
p=new Element;
p->p=a;
p->next=NULL;
if(!b)
return p;
Lista c;
while(b)
{
c=b;
b=b->next;
} c->next=p;
return pocz;
}
Lista przenies(Lista b)
{
char nazwa[20];
struct dvd z;
ifstream plik;
cout<<"Podaj nazwe pliku\n";
cin>>nazwa;
plik.open(nazwa);
if(!plik)
{
cout<<"Blad otwarcia pliku\n";
return b;
}
while(plik.good())
{ plik>>z.tytul;
plik>>z.rezyser;
plik>>z.aktor1;
plik>>z.aktor2;
plik>>z.aktor3;
plik>>z.rok;
b=dodaj(z,b);
}return b;
}
void usun_pierwszy(Lista*b)
{if(*b==NULL)
return;
Lista t; t=*b;
(*b)=(*b)->next;
delete t;
return;
}
void dolacz(struct dvd a, Lista *b)
{
Lista c, pom;
c=new Element;
c->p=a;
if((*b)==NULL)
{
(*b)=c;
(*b)->next==NULL;
return;}
if(strcmp(((*b)->p).tytul, ((c->p).tytul))>0)
{
c->next=*b;
*b=c;
return;
}
pom=(*b);
while((pom->next!=NULL)&&(strcmp(pom->next->p.tytul, ((c->p).tytul))<0))
pom=pom->next;
c->next=pom->next;
pom->next=c;
return;
}
int main()
{Lista b=NULL; int x; struct dvd z;
while(1)
{ cout<<"\n";
cout<<"Wybierz opcje:\n";
cout<<"0-koniec programu\n";
cout<<"1-dodaj element listy na poczatek\n";
cout<<"2-wyswietl elementy listy\n";
cout<<"3-dodaj element na koniec listy\n";
cout<<"4-uwtorz liste na podstawie pliku tekstowego\n";
cout<<"5-usun pierwszy element listy\n";
cout<<"6-usun ostatni element listy\n";
cout<<"7-dolacz element w wybranym miejscu\n\n";
cin>>x;
switch(x)
{ case 0:return 0;
case 1:{ cout<<"Podaj tytul:\n";
cin>>z.tytul;
cout<<"Podaj imie i nazwisko rezysera:\n";
cin>>z.rezyser;
cout<<"Podaj imie i nazwisko aktora, grajacego w filmie:\n";
cin>>z.aktor1;
cout<<"Podaj imie i nazwisko aktora, grajacego w filmie:\n";
cin>>z.aktor2;
cout<<"Podaj imie i nazwisko aktora, grajacego w filmie:\n";
cin>>z.aktor3;
cout<<"Podaj rok premiery filmu:\n";
cin>>z.rok;
b=dodaj(z,b); break;}
case 2:{wyswietl(b);break;}
case 3:{ cout<<"Podaj tytul:\n";
cin>>z.tytul;
cout<<"Podaj imie i nazwisko rezysera:\n";
cin>>z.rezyser;
cout<<"Podaj imie i nazwisko aktora, grajacego w filmie:\n";
cin>>z.aktor1;
cout<<"Podaj imie i nazwisko aktora, grajacego w filmie:\n";
cin>>z.aktor2;
cout<<"Podaj imie i nazwisko aktora, grajacego w filmie:\n";
cin>>z.aktor3;
cout<<"Podaj rok premiery filmu:\n";
cin>>z.rok;
b=dodaj_ost(z,b); break;}
case 4:{b=przenies(b); break;}
case 5:usun_pierwszy(&b);break;
case 6:;break;
case 7:{ cout<<"Podaj tytul:\n";
cin>>z.tytul;
cout<<"Podaj imie i nazwisko rezysera:\n";
cin>>z.rezyser;
cout<<"Podaj imie i nazwisko aktora, grajacego w filmie:\n";
cin>>z.aktor1;
cout<<"Podaj imie i nazwisko aktora, grajacego w filmie:\n";
cin>>z.aktor2;
cout<<"Podaj imie i nazwisko aktora, grajacego w filmie:\n";
cin>>z.aktor3;
cout<<"Podaj rok premiery filmu:\n";
cin>>z.rok;
dolacz(z,&b); break;}
default:return 0;
}
}
return 0;
}