jak miałbym skakać w ten sposób po między liniami bo dane nie są jednakowej długości
I tym samym odpowiedziałeś sobie na pytanie jak to zrobić: nie da się.
Pierwsza zmienna jest pod znakiem 0, więc jest łatwo. A teraz pytanie o ile znaków przesunąć się w pliku, żeby dotrzeć na początek drugiej zmiennej? Nawet jeśli wiesz, albo to jakoś obliczysz, to to samo musiałbyś zrobić dla wszystkich linii w pliku. A nie daj Boże skrócisz jedną linijkę w dowolnym miejscu w pliku i cały program się sypie...
Nie ma nic złego w odczytywaniu pliku wierszami. Jeśli chcesz się dostać do 5 wiersza, to wczytaj 5 wierszy za każdym razem nadpisując wartość stringa:
ifstream plik("dane.txt");
string wiersz;
for( int i = 0; i < 5; i++ )
getline( plik, wiersz );
cout << "5 wiersz to: " << wiersz;
To jest najprostsze rozwiązanie Twojego problemu. Jeśli uważasz je za zbyt wolne, bo za każdym razem trzeba alokować pamięć na nowego stringa (i pewnie piszesz program dla NASA), to możesz napisać pętlę, która będzie odczytywała znak po znaku i "wyłapywała" znaki końca linii. Jeśli minie 4 znaki '\n' to znaczy, że obecnie znajduje się w 5 wierszu. Coś takiego:
ifstream plik("dane.txt");
for( int i = 0; i < 4; )
{
if( plik.get() == '\n' )
i++;
}
string wiersz;
getline( plik, wiersz );
cout << "5 wiersz to: " << wiersz;
Pętla ta, tak jak napisałem, 4 razy minie znak nowej linii, więc za 4 razem będzie już na początku 5 wiersza.
Przy tym wszystkim należy jeszcze zadbać o sytuację, gdy nastąpi koniec pliku (np. chcesz odczytać 20 wiersz, a plik ma ich tylko 15).
Pozdrawiam.