C++ problem z wyswietleniem zawartosci pliku


(Laskowiak92) #1

Witam napisałem program który tworzy baza danych i zapisuje ją do pliku ale mam problem z wyświetleniem zawartości pliku wywala błąd…

(po zamknięciu programu i odpaleniu go ponownie nie da się wyświetlić zawartości pliku).

Proszę o pomoc w rozwiązaniu tego problemu.

Oto kod programu:

#include 

#include 

#include 

#include 



using namespace std;


struct rekord

{

    char marka[30];

    char model[30];

    int rok;

    float cena;

    int przebieg;


};


void wyswietl(rekord *wsk, int i, int &licznik);

void dodaj(rekord *wsk,int i, int &licznik);




int main()

{ int licznik=0;

    int ile;

    char z;

    rekord *wsk;

    rekord baza[100];

    do{

        system("cls");


        cout << "Komis samochodowy:" << endl;

        cout << "1-Dodaj" << endl;

        cout << "2-Wyswietl" << endl;

        cout << "3-Szukaj" <
        cout << "4-Wczytaj z pliku" <
        cout << "5-Zapisz do pliku" <
        cout << "6-Wyjscie" <
        cin>>z;

int licznik2=licznik-1;


  switch (z)

    {

        case '1' :

        system("cls");

        cout<<"Dodawanie samochodu"<
        wsk=&baza[licznik];

        dodaj(wsk,ile,licznik);

        break;


        case '2' :

        system("cls");

        cout<
        cout<<"Zawartosc bazy danych: "<

        wyswietl(wsk,ile,licznik);

        cout<<"dowolny klawisz aby wyjsc"<
        getch();

        break;


        case '3' :

        system("cls");

        break;

 //wczytanie z pliku===========================================

        case '4' :

        {

        system("cls");


                ifstream mojplik;

                mojplik.open("abc.txt");


                while(!mojplik.eof())

                {


                    mojplik>>wsk->marka;

                    mojplik>>wsk->model;

                    mojplik>>wsk->rok;

                    mojplik>>wsk->przebieg;

                    mojplik>>wsk->cena;


                wsk++;

                }

                mojplik.close();

        }


        break;

//zapis do pliku ==============================================

        case '5' :

       {

            system("cls");

            ofstream mojplik;

            mojplik.open("abc.txt");

            //mojplik<
        for(int b=0;b
            {

                wsk--;

            }



        for (int z=0;z
            {

                mojplik<<(*wsk).marka<<" "<model<<" "<rok<<" "<przebieg<<" "<cena<
                wsk++;

            }




        mojplik.close();

        wsk--;

         }

    break;

     }



    }while(z!='6');



    return 0;

}


//=======================Wyswietlanie========================

void wyswietl(rekord *wsk, int i, int &licznik)

{

    i=licznik;

    int g=licznik-1;

    for(int b=0;b
    {

        wsk--;

    }

    int a=licznik;

    cout<<"Ilosc samochodow w bazie: "<
    cout<
    for (int a=0;a
    {

        cout<
    cout<<"Dane samochodu numer "<
    cout<<"marka: "<<(*wsk).marka<
    cout<<"model: "<<(*wsk).model<
    cout<<"rok: "<<(*wsk).rok<
    cout<<"przebieg: "<<(*wsk).przebieg<<"km"<
    cout<<"cena: "<<(*wsk).cena<<"zl"<



    wsk++;


    }


}

//=======================Dodawanie=========================


void dodaj(rekord *wsk,int i,int &licznik)

{



        cout<<"podaj marke: "<
        cin>>(*wsk).marka;

        cout<<"podaj model: "<
        cin>>(*wsk).model;

        cout<<"podaj rok: "<
        cin>>(*wsk).rok;

        cout<<"podaj przebieg: "<
        cin>>(*wsk).przebieg;

        cout<<"Podaj cene:"<
        cin>>(*wsk).cena;

        wsk++;

        licznik++;



}

//=======================Szukanie======================[/code]

([alex]) #2

przy zapisie używasz licznik2 który ma się nijak do obecnego stanu licznik.


(Laskowiak92) #3

Proszę czytać ze zrozumieniem, problem jest z wyświetlaniem a nie z zapisem…

Program zapisuje poprawnie jedyny problem jest z wczytaniem zawartości pliku.


(Rolek0) #4

Zmienna zaraz po utworzeniu zawiera to, co znajdowało się w miejscu w pamięci, w którym została umieszczona.

Używasz wszędzie zmiennej wsk, ale ustawiasz ją tylko w opcji „1-Dodaj”.

Jeśli bez ręcznego dodania jakichś danych, od razu weźmiesz wczytywanie z pliku to dane zostaną wczytane pod losowy adres w pamięci.

Pomyśl też nad lepszym formatowaniem kodu, bo ciężko się czyta.

Polecam też: http://www.intercon.pl/~sektor/cbx/, http://xion.org.pl/productions/texts/coding/megatutorial/ oraz http://www.youtube.com/user/GynvaelColdwind.


(Laskowiak92) #5

Wczytuje dane z pliku za pomocą:

ifstream mojplik;

mojplik.open(“abc.txt”);

while(!mojplik.eof())

{

string line1;

getline(mojplik, line1, ‘;’);

cout<

Ale pojawia się problem z przypisaniem zmiennej string do zmiennej char/int i nie wiem jak sobie z tym poradzić… ;/