C++ Zle wczytywanie z pliku

0

Witam, mam problem z funkcją która wczytuje z pliku.
Żeby dokładnie wytłumaczyć o co chodzi, posłużę się gotowym przykładem.
Funkcja wczytuje 3 stringi i 2 int'y
cos
coss
cosss
1
2
I teraz wszystko dobrze działa, gdy po dwójce nie ma nowej linjki, gdy jest to wtedy funkcja odpala sie jeszcze raz i wczytuje same int'y.
Dodatkowo, przy dodawaniu nowych elementów, zapisują się w przykładowy sposób
cosss
1
2nowecos
Gdy dodam enter po 2 (tak, zeby domyslnie zapisywalo, to pgoram znowu sypie sie przez inty.)

Funkcja wczytywanie oraz zapisywanie:

	void lista::wczytywanie()
	{
		fstream plik;
		plik.open("book.txt", ios::in);
		{
			while (plik.eof()==0)
			{
				string tit, aut, gen;
				int cop, id;
				getline(plik, tit);
				getline(plik, aut);
				getline(plik, gen);
				plik >> cop;
				plik >> id;
				lista_ksiazek->dodaj_ksiazke(tit, aut, gen, cop, id);
			}
		}


		plik.close();
	}

	void lista::zapisywanie()
	{
		fstream plik;
		plik.open("book.txt", ios::out);
		ksiazka *tymczasowa = new ksiazka;
		if (pierwsza != NULL)
		{
			tymczasowa = pierwsza;
			while (tymczasowa)
			{

				plik << tymczasowa->title << endl;
				plik << tymczasowa->author << endl;
				plik << tymczasowa->genre << endl;
				plik << tymczasowa->copies << endl;
				plik << tymczasowa->ID;
				if (tymczasowa->nastepna != NULL)
					tymczasowa = tymczasowa->nastepna;
				else break;
			}
		}
		delete(tymczasowa);
		plik.close();
 

Dodam też, że przy pustym pliku tekstowym, również zapisują się inty, tylko że jako śmieci.

Z góry bardzo dziekuje za jakakolwiek wskazówke!
Pozdrawiam

0

zamien sobie plik na cin i wczytuj ze standardowego wejscia to bedzie Ci sie latwiej szukalo bledow.

Bez dokladnego wglebiania sie w kod to juz widze ze jak wczytujesz liczby to powinienes uzywac getline i potem z tego string wczytywac liczby (uzywajac np. stringstream lub opcjonalnie po prostu wywoluj getline i wczytuj do jakiegos fakeowaego stringa zaraz po wczytaniu liczby). Jak czytasz bezposrednio to wczytujesz liczbe ale nie wczytujesz znaku nowej linii, ktory nie nalezy do liczby, przez co przy kolejnym wywolaniu getline wczytujesz pusta linie ktora zostala na wejsciu

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