Program przestał działać

0
class DataExporter{
public:
    DataRow dr[1000];
    int n;
    DataExporter(){
        int wiersze = 0;
        string tekst;
        char test[100];
        fstream plik("plik1.txt", ios::in | ios::out | ios::ate);
        plik.close();
        plik.open("plik1.txt");
        while(plik.good()){
            plik.getline(test,100);
            tekst = test;
            dr[wiersze++] = DataRow(explode(tekst, ',', 0), explode(tekst, ',', 1), explode(tekst, ',', 2), explode(tekst, ',', 3));
        }
        n = wiersze-1;
        plik.close();
    }
    virtual void wypisz() = 0;
};

 

w pliku "plik1" mają znajdować się dane np:

Adam,Kowalski,A444,5
Adam,Kowalski,A344,3

ale wyskakuje mi błąd program przestał działać, co na to poradzić?

0

Uruchomić pod debugerem.

0

wyskakuje Unhandled exception at 0x010b7046 in xxx.exe: 0xC0000005: Access violation writing location 0x000000a1.

0

To teraz wstaw breakpointa na początku main a potem prześledź program za pomocą "step" i zobacz gdzie się wysypało.

0

za bardzo nie wiem jak tego używać...

0

Masz rację. Wydaje ci się. Bo to jest akurat miesjce w kodzie gdzie nie ma żadnej instrukcji. Nie wierzę że debuger w ogóle w to miejsce skoczył.

0

przyznam że zapomniałem jak tego używać

1
while (!plik.eof())

Bo nie robi się pętli na eof(). Nie działa jak powinna.

while (plik.good())
0
Azarien napisał(a):
while (!plik.eof())

Bo nie robi się pętli na eof(). Nie działa jak powinna.

while (plik.good())

tak to zadziałało! ale nie wiem czemu teraz nie ma nic na ekranie poza <CONSOLE> ? możliwe ze tabela jest pusta?

0

bo pliku ci nie otwiera... wcześniej się wywalało, bo pętla z eof() była nieskończona, więc w pewnym momencie przekraczałeś rozmiar tablicy.
teraz pętla nie wykonuje się wcale.

zastanów się, dlaczego otwarcie pliku się nie udaje.

0

to jak to zrobić by pętla była skończona i przekazać wszystkie dane do tabeli?

0

Uzyc copy() jak czlowiek?

0

nigdy nie robiłem operacji na plikach , a o

copy()

słyszę pierwszy raz!

0

to wpisz w google

0

copy( element pierwszy zakresu źródłowego , ostatni element zakresu źródłowego , pierwszy element zakresu docelowego );

jak tego mam użyć?

1

Napisz moze zadanie bo kod jest w oplakanym stanie i w gruncie rzeczy nie wiele sie z tego da wyciagnac. Co jest nie tak:
#Nie wywoluje sie operacji na plikach w konstruktorze.
#Pisanie bezsensownych klas jest serio bezsensowne.
#Piszesz klasy DataSomethingBlaBlaBla, ktore nijak nie sa generyczne. Czemu one sie tak w ogole nazywaja? Person jest zbyt mainstreamowe?

fstream plik("plik1.txt", ios::in | ios::out | ios::ate);
plik.close();
plik.open("plik1.txt");

O co chodzi?
#Co robi magic i czemu tego co robi nie ma wspomnianego w nazwie?
#Po co ci 2 etykiety public: w klasie?
#Po co mieszasz char[] z std::string?

0
 plik.close(); 

wykasowałem
5. Magic to taki niby explode który wyciąga dane które są miedzy przecinkami
6 char test[100]; // myślałem ze to jest liczba znaków

totalnie nie umiem sobie poradzić z tym programem.

0

działa! dzięki za pomoc, poradziłem sobie

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