• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Lista z pliku, bład wyswietlania

Object Storage Arubacloud
0 głosów
95 wizyt
pytanie zadane 21 grudnia 2015 w C i C++ przez martix3 Użytkownik (690 p.)

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;
    }

 

1 odpowiedź

0 głosów
odpowiedź 21 grudnia 2015 przez niezalogowany
Użyj stringa i wczytuj dane z pliku za pomocą getline.
komentarz 28 grudnia 2015 przez martix3 Użytkownik (690 p.)
Getline trzeba użyć w funkcji przenies? Ta funkcja przenosi dane z pliku na listę...

Podobne pytania

0 głosów
1 odpowiedź 172 wizyt
pytanie zadane 27 października 2017 w C i C++ przez Partyjny Obywatel (1,170 p.)
0 głosów
1 odpowiedź 263 wizyt
pytanie zadane 5 stycznia 2016 w C i C++ przez martix3 Użytkownik (690 p.)
+2 głosów
1 odpowiedź 248 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...