Sterowanie funkcja getline

0

Witam,
Mam kolejne pytanie.
Powiedzmy, że przy pomocy funkcji getline sprawdzam ile jest w pliku wierszy bo potrzebuje tego żeby ustalić rozmiar tablicy.

while(getline(plik,wiersz))
ile++;

Po tym getline znajduje się na końcu pliku, a ja chciałbym zacząć wczytywać wiersze od początku.
Jak to zrobić? Czy muszę zamykać i otwierać znowu plik czy da się tym jednak jakoś sterować?

0

plik.seekg(0);ustawi wskaźnik odczytu na początku pliku.

http://www.cplusplus.com/reference/iostream/istream/seekg/

0

plik.seekp(1);
plik.seekg(2);
cout<<"tellp "<<plik.tellp()<<endl;
cout<<"tellg "<<plik.tellg()<<endl;

Zwraca mi zawsze -1.
Co źle robię? :)

0

Ok już wiem.
Dopisałem jeszcze:
plik.clear();
przed tym wszystkim żeby wyczyścić stan pliku
Ale mam kolejną rzecz:

 
while(getline(plik,wiersz))
			ile++;
		string *tab=new string[ile];
		plik.clear();
		plik.seekg(0);
		
		for(i=0;i<ile;i++)
		{
			while(getline(plik,wiersz))
			{
				tab[i]=wiersz;			
			}
		}

Kompiluje się tylko w momencie kiedy program się kończy wywala mi błąd i chce wysłać raport.
Dzieje się tak przez tą tablice stringów.
Czy ktoś może mi powiedzieć jak zrobić to żeby było ok?

Edit..
Już wiem, napisałem delete tab; zamiast delete []tab;

0

W twoim kodzie w pierwszym elemencie tablicy będzie ostatni wiersz, reszta zostanie pusta. Powinno być:

                for(i=0;(i<ile)&&(getline(plik,wiersz));++i) tab[i]=wiersz;

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