Odczyt danych z pliku

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.

0

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

0

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

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.

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

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