Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Wczytywanie danych z pliku do struktury

kamilk87 28 Sty 2012 15:44 1601 1
  • #1 28 Sty 2012 15:44
    kamilk87
    Poziom 10  

    Witam!
    Mam za zadanie przekształcić program z książki "C++. Szkoła programowania" S. Prata, tak by dane wczytywane były z pliku .txt
    Oryginalny program wygląda tak

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    ja przekształciłem go tak
    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    dane z pliku są niby wczytywane, ale nie wpisuje ich do kontenera vector i w konsekwencji program nie wykonuje dalszych instrukcji.
    Wczytywany plik ma postac:
    tytuł;ocena
    tytuł;ocena
    itd
    Proszę o pomoc

    0 1
  • #2 31 Sty 2012 09:51
    antekone
    Poziom 16  

    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:

    Kod: cpp
    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
  Szukaj w 5mln produktów