Pozwolę sobie skomentować co robi ta pętla:
for(int j=0; j<8; j++)
{
plik>>X[j].imie; // 1
getline( plik, wiersz ); // 2
plik>>X[j].rasa; // 3
getline( plik, wiersz ); // 4
plik>>X[j].wiek; // 5
getline( plik, wiersz ); // 6
plik>>X[j].waga; // 7
getline( plik, wiersz ); // 8
}
1. wczytaj wyraz do tablicy znaków (wczyta max 9 znaków)
2. wczytaj resztę wiersza do stringa "wiersz"
3. wczytaj wyraz do innej tablicy znaków (wczyta max 19 znaków)
4. wczytaj resztę wiersza nadpisując poprzednią wartość stringa "wiersz" (jeżeli uprzednia operacja wczytania (rasa) wczytała cały wiersz, to getline() wczyta cały wiersz następny)
5. wczytaj liczbę do zmiennej wiek
... i tak dalej....
Dużo zależy od tego jak skonstruowałaś swój plik. Jeżeli plik wygląda mniej więcej tak:
"Dane.txt"
Pan Garfield
Pers
9
10
A Ty chciałabyś wczytać te dane, to kilka uwag:
- imię i rasę najlepiej przechować w stringu
- dane wczytujesz tak:
getline( plik, X[ j ].imie );
getline( plik, X[ j ].rasa );
plik >> X[ j ].wiek;
plik >> X[ j ].waga;
Stosując się do powyższych zaleceń powinno się udać. Nie wiem jednak jak wygląda dokładnie struktura pliku, który chcesz odczytać, więc nie mogę powiedzieć na pewno, że to zadziała. Jeżeli nadal nie zadziała, to pokaż jak wygląda plik, który chcesz odczytać :-)