Odczyt danych z pliku

Odpowiedz Nowy wątek
2015-11-25 12:32
0

Witam. Chce pobrać dane z pliku. Każda nowa dana jest w nowej linii. Mam taki oto kod:

    fstream plik;
    plik.open("baza/zawodnicy.txt", ios::in);
    if (plik.good() == false) {
        cout << "Nie udalo sie otworzyc pliku!" << endl;
        exit(0);
    }
    int id = 1;
    int i = 0;
    int aktualny_nr = 2;
    int nr_linii = (id - 1) * 8 + 1;
    string linia;
    while (getline(plik, linia)) {
             if(aktualny_nr == nr_linii) zawodnik[i]->id = atoi(linia.c_str());
             if (aktualny_nr == nr_linii+1)zawodnik[i]->imie = linia;
             if (aktualny_nr == nr_linii+2) zawodnik[i]->nazwisko = linia;
             if (aktualny_nr == nr_linii+3)zawodnik[i]->nick = linia;
             if (aktualny_nr == nr_linii+4)zawodnik[i]->druzyna = linia;
             if (aktualny_nr == nr_linii+5)zawodnik[i]->panstwo = linia;
             if (aktualny_nr == nr_linii+6)zawodnik[i]->wiek = atoi(linia.c_str());
             if (aktualny_nr == nr_linii+7)zawodnik[i]->kdratio = atoi(linia.c_str());
             if (aktualny_nr == nr_linii+8)zawodnik[i]->komentarz = linia;
             aktualny_nr++;
            i++;
    }
    plik.close();

Kod oczywiście nie działa. Nie mam pomysłu jak zrobić aby to działało.

A jaki otrzymujesz błąd? Co się wyświetla? - Silv 2015-11-25 13:05

Pozostało 580 znaków

2015-11-25 13:10
0

user image
Dzieje się coś takiego po pierwszym przejściu pętli.

Pozostało 580 znaków

2015-11-25 13:23
0

Użyj debugera i pokaż nam gdzie się wywala.

Pozostało 580 znaków

2015-11-25 13:32
0

user image

Ogólnie chcę pobrać dane zawodnika. Plik wyglada mniej więcej tak:
ID // id pierwszego zawodnika
Imie
Nazwisko
Nick
ID // id juz nastepnego zawodnika
Imie
.........
Jeżeli pobiorę pierwszego to i++, i pobieram następnego którego imię zaczyna się już w następnej linii.
Zapomniałem dodać ze odczytywać dane musi od drugiej linii w pliku, ponieważ pierwsza linia to suma wszystkich zawodników w pliku.

edytowany 1x, ostatnio: LifesGood, 2015-11-25 13:39

Pozostało 580 znaków

2015-11-25 13:38
0
int nr_linii = (id - 1) * 8 + 1;

bez sensu, id w tym wypadku jest 1 wiec 1 - 1 = 0. 0 * 8 = 0 + 1 = 1
wiec nie lepiej napisac po prostu 1?

jezeli wywala sie gdzies w tym kodzie to zapewne tutaj

zawodnik[i]

zapewne wychodzisz po za wielkosc tablicy

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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