Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Rozdział 33 - błędny kod źródłowy przykładu

Ostatnio zmodyfikowano 2014-10-08 08:47
Autor Wiadomość
Gwynbleidd
Temat założony przez niniejszego użytkownika
Rozdział 33 - błędny kod źródłowy przykładu
» 2014-09-28 15:19:14
Link do rozdziału: http://cpp0x.pl/kursy/Kurs-C++/Poziom-4/Wczytywanie-danych-z-pliku-za-pomoca-operatora/325
Po skopiowaniu kodu źródłowego z przykładu, utworzeniu pliku dane.txt o zawartości:
"10 dodac 5
3 odjac 2
77 zonk 3
99 dodac 1"

Program nie sczytuje ostatniej linijki. Wystarczy dodać znak biały po "99 dodac 1" i już wszystko działa.

Jak robiłem zadania z zajęć i korzystałem z tej metody otwierania plików, to również nie sczytywał zmiennych. Po "sczytaniu" i wypisaniu tego, co sczytał (za pomocą cina kolejne liczby), wypisywał określone liczby, w zależności od zmiennej. Jak miał to być int, to zawsze wypisywał taką samą wartość, jak float, to również jakąś określoną itd.

Na zajęciach problem rozwiązała zmiana wczytywania pliku na (w tym wypadku byłoby to) "ifstream plik (nazwaPliku.c_str());". Tutaj niestety problemu to nie rozwiązuje. Dziwne jest to, bo jak po "plik >> a >> b >> c;" każemy wypisać sczytane zmienne, to wypisuje razem z ostatnią linijką, lecz operacji dla niej nie przeprowadza, a przecież "plik.good()" powinien zwracać wartość 1.



@edit
Dobra, rozgryzłem ten problem.
Zamiast
        plik >> a >> b >> c;
        if( plik.good() )
             wykonajOperacje( a, b, c );
        else
             break;
powinno być
        plik >> a >> b >> c;
             wykonajOperacje( a, b, c );
        if( !plik.good() )
             break;
Teraz najpierw wykonuje operację dla wczytanych danych, a dopiero potem sprawdza, czy dalej coś jeszcze jest. Pozostaje poprawić kod.
P-117715
Monika90
» 2014-09-28 15:41:13
można pooprawić na
C/C++
plik >> a >> b >> c;
if( !plik.fail() )
     wykonajOperacje( a, b, c );
else
     break; //zakończ wczytywanie danych - wystąpił jakiś błąd (np. nie ma więcej


albo na
C/C++
plik >> a >> b >> c;
if( plik )
     wykonajOperacje( a, b, c );
else
     break; //zakończ wczytywanie danych - wystąpił jakiś błąd (np. nie ma więcej

P-117717
Gwynbleidd
Temat założony przez niniejszego użytkownika
» 2014-09-28 18:47:02
Tak, ale z racji tego, że Twoje propozycje korzystają z rozwiązań, których osoba ucząc się od początku z kursu jeszcze nie poznała, to korekta na twoje rozwiązania byłaby niestosowna.
P-117731
pekfos
» 2014-09-28 18:51:01
Twoje propozycje korzystają z rozwiązań, których osoba ucząc się od początku z kursu jeszcze nie poznała
fail() jest znane od niemal początku kursu.
P-117733
Gwynbleidd
Temat założony przez niniejszego użytkownika
» 2014-10-05 19:24:56
Kiedy lekcja zostanie poprawiona?
P-117994
Rashmistrz
» 2014-10-07 21:10:42
fail() jest znane od niemal początku kursu.
 
Przy obsłudze plików nie ma żadnej wzmianki o tej  metodzie,
ale niektórzy mogli się domyślić po zobaczeniu metody .good().
P-118109
Memento96
» 2014-10-08 08:47:17
Kiedy lekcja zostanie poprawiona?
Już jest poprawione ;) Dzisiaj rozwiązywałem zad. dom i poszło ładnie
P-118131
« 1 »
  Strona 1 z 1