Funkcja plik.eof() zawodzi
Ostatnio zmodyfikowano 2013-11-20 19:56
waniusza Temat założony przez niniejszego użytkownika |
Funkcja plik.eof() zawodzi » 2013-11-19 21:44:25 Witam, tworzę kolejny program w który występuje tan sam problem, w pierwszy jakoś przypadkowo rozwiązałem - nie wiem jak, drugi sobie darowałem, ale teraz chce ten problem rozwiązac. Chodzi mi o tę funkcję, to fragment programu, ale ogólnie w nim jest błąd. int IloscWersow( std::string Sciezka ) { std::cin.clear(); std::cin.sync(); std::ifstream plik; int n; char znak; plik.open( Sciezka.c_str() ); if( !plik.good() ) { std::cout << "Blad odczytu pliku! \n"; return 0; } do { plik >> znak; if( znak == '\n' ) n++; } while( !plik.eof() ); return n; }
main() { std::string plik = "suma.txt"; int ilosc; ilosc = IloscWersow( plik.c_str() ); std::cout << "W pliku " << plik << "jest " << ilosc << " wersow"; return 0; }
Program wyświetla mi, że plik ma 4521129 wersów ;| W czym jest problem, dlaczego program nie uwzględnia do ... while (!PLIK.EOF()) ? Za pomoc z góry dziękuje i przepraszam jeśli coś ma nieodpowiednią forme, to mój pierwszy post, a na dodatek działam bez myszki EDIT:: Zadeklarowałem wartośc początkową dla n i sie zdaje że sie naprostowało troszke, ALE teraz wartośc wersów jest równa wartości początkowej, tak jakby znak nigdy nie był identyczny z '\n' |
|
RazzorFlame |
» 2013-11-19 21:56:45 Nie wczytuj tak z pliku. Użyj plik.read((char*)&zmienna_znakowa, 1); |
|
Monika90 |
» 2013-11-20 09:05:25 Użyj plik.read((char*)&zmienna_znakowa, 1); |
Po co tak kombinowac? Można tak: plik.get( znak ); Zawsze jednak należy sprawdzać po próbie wczytania, czy się wczytać udało. Nota bene: ilosc = IloscWersow( plik.c_str() ); .c_str() jest tu niepotrzebne |
|
waniusza Temat założony przez niniejszego użytkownika |
» 2013-11-20 19:56:44 Dziękuje za wsparcie:) Ostatecznie zdecydowałem się na rozwiązanie wykorzystujące fakt, że jest funkcja wczytująca całą linijke i w ostateczności interesujący fragment kodu wygląda tak: do { std::getline( plik, wers ); n++; } while( !plik.eof() );
I zadeklarowałem wartość początkową n=0, oraz dziękuje za uwage dot. .c_str() :) Jesteście wspaniali!:P |
|
« 1 » |