Obsluga Plikow strumienie przeciazone operatory

0

Mam taka o to sytuacjie
Chce Wczytac z Pliku liste do vectora mojej klasy po czym posortowac ja wedlug elementu string w tej ze klasie
a nastepnie zapisac ja do tego samego pliku.
Jednak przeciazony operator << cos sobie dziwnego ubzdural i zawsze wczytuje o 1 porcje danych za duzo to znaczy ostatnie 2 porcje danych sa zdublowane nie wiedziec dlaczego... oto fragment kodu

// przeciazony operator
ostream& operator <<(ostream &plik, const Czlowiek &cz)
{
	return plik << cz.nick << " " << cz.przegrane << " " << cz.rozegrane << " " << cz.wygrane<< " ";
}

// funkcja wczytujaca zawodnikow
vector <Czlowiek> WczyZawodnikow(void)
{
	fstream zawodnicy;
	Czlowiek pom;
	zawodnicy.open("Zawodnicy.txt", ios::in);
	vector <Czlowiek> Lgraczy;
	vector <Czlowiek>::iterator it;
	while(!zawodnicy.eof())
	{
		zawodnicy >> pom;
		Lgraczy.push_back(pom);
	}
	sort(Lgraczy.begin(), Lgraczy.end(), mycmp);
	cout << Lgraczy.size();
	for(int x=0;x<Lgraczy.size(); x++)
		Lgraczy[x].wypisz();
	zawodnicy.close();
	return Lgraczy;
}

 

a to przykladowe dane Witek 2 2 0 Wiesiek 5 9 4 Jan 1 2 1 Jacek 0 0 0 Adam 5 8 3
ktos ma jakis pomysl czemu ostatni zawodnik jest dublowany idodawany podwojnie ?

0

standardowy błąd użycia istream::eof(). istream::eof()==true nie oznacza, że osiągnięto koniec pliku, ale że nastąpiła próba czytania poza końcem pliku.
Popraw pętle tak:

        while( zawodnicy >> pom)
        {
                Lgraczy.push_back(pom);
        }

a zadziała.

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