1. Zapomniałeś wstawić klamerki { } za while(ReadReview(temp)) -- pętla przez cały czas wywoływała tylko funkcje ReadReview() i books.push_back(temp).
2. Funkcja ReadReview() ma kilka problemów.
a) Za każdym razem otwiera plik i czyta z niego tekst od początku. Jeśli uda mu się przeczytać, to potem program znowu do niej wchodzi i znowu czyta od początku, i tak w kółko.
b) Funkcja czyta tylko pole 'title' struktury Review, pozostawiając 'rating' bez wczytywania.
c) Deklaracja typu wartości zwrotnej w postaci bool'a, podczas gdy funkcja w rzeczywistości zwraca "losową" wartość (brak keyworda return).
Naprawa programu to usunięcie funkcji ReadReview() i wstawienie np. takiego kodu zamiast tej pierwszej pętli while:
Zaloguj się, aby zobaczyć kod
Destruktor kasy ifstream powinien zatroszczyć się o zamknięcie pliku po wyjściu ze scope'a tworzonego przez funkcję main(), więc chyba nie trzeba zamykać pliku ręcznie, choć to należałoby tak naprawdę sprawdzić. W każdym razie dopisanie kodu zamykania pliku na końcu main() nie zaszkodzi
Przy okazji, przy takim wyglądzie kodu zmieni się nieco struktura pliku dane.txt. Wcześniej każdy rekord podawany był w nowej linijce (jak sądzę), teraz jest to cały czas jedna linijka. Mój przykładowy dane.txt:
Code: 1 tytul1;1;tutul2;2;tytul3;3;
0