[Rozdzial 33] przykład a zadanie
Ostatnio zmodyfikowano 2017-05-24 17:48
amacotti Temat założony przez niniejszego użytkownika |
[Rozdzial 33] przykład a zadanie » 2017-05-23 21:08:42 Przykład z rodzialu 33: .bool wczytajPlik( std::string nazwaPliku ) { std::ifstream plik; plik.open( nazwaPliku.c_str() ); if( !plik.good() ) return false; while( true ) { int a; std::string b; int c; plik >> a >> b >> c; if( plik.good() ) <- czemu tutaj to dzia ł a ? tzn czemu zwraca true je ś li plik si ę sko ń czy ł ? wykonajOperacje( a, b, c ); else break; } return true; } Fragment zadania bool policzLiczby( std::string sciezka ) { std::ifstream plik; plik.open( sciezka.c_str() ); if( !plik.good() ) return false; int wynik = 0; int a; while( true ) { plik >> a; if( plik.good() ) < a tutaj to nie dzia ł a ? { wynik += a; } else break; } std::cout << " suma liczba w pliku to: " << wynik << std::endl; return true; } W programie z zadania nie dodaje mi ostatniej liczby(wczytuje się,sprawdzałem) nie dodaje się ponieważ nie spełnia się warunek if, bo już nie ma co wczytać z pliku, dlatego, że plik.good() daje nam false. W takim przypadku dlaczego działa to w przykładzie? tam też jest wczytanie przed warunkiem dokładnie jak u mnie |
|
maly7 |
» 2017-05-23 22:21:05 A jak wygląda twój plik? Mi podany przez ciebie program wczytuje wszystkie liczby z pliku. |
|
amacotti Temat założony przez niniejszego użytkownika |
» 2017-05-23 22:46:14 Dokładnie mój kod wygląda tak: #include <fstream> #include <iostream> #include <string>
bool wczytajPlik( std::string nazwaPliku ) { std::ifstream plik; plik.open( nazwaPliku.c_str() ); if( !plik.good() ) return false; int wynik = 0; while( true ) { int a; plik >> a; if( plik.good() ) wynik = wynik + a; else break; } std::cout << wynik; return true; }
int main() { if( !wczytajPlik( "liczby.txt" ) ) std::cout << "Nie uda³o siê otworzyæ pliku" << std::endl; return 0; }
a plik stworzyłem w notatniku i jego zawartość to: "2 3 5 7" W tym wypadku nie wczytuje mi 7. edit. Przez Twoje pytanie o plik txt pomyślałem, że jak dam spację po ostatniej liczbie to może zadziała i faktycznie zadziałało. Także dziękuję. Dla podsumowania metoda plik.good() - zwraca wartość true jeśli jest możliwe wczytanie,(w moim przypadku wczytywało spację i zwróciło prawdę. ps. Wiem, że draże temat, ale chciałbym być pewien na 100% bo może przyda się to kiedyś. |
|
karambaHZP |
» 2017-05-23 23:59:03 w moim przypadku wczytywało spację i zwróciło prawdę |
Bardziej obstawiam inny błąd, ponieważ operator >> pomija poprzedzające białe znaki. Najwidoczniej metoda good() doczytując do końca pliku ustawia flagę na false . Wtedy pomija operację na liczbie. if( !plik.fail() ) lub if( !plik ) lub if( !plik.eof() ) powinno zadziałać dobrze. |
|
amacotti Temat założony przez niniejszego użytkownika |
» 2017-05-24 17:48:45 Dzięki, twoje wyjaśnienie ma sens też zadziałało: |
|
« 1 » |