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

Funkcja plik.eof() zawodzi

Ostatnio zmodyfikowano 2013-11-20 19:56
Autor Wiadomość
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.

C/C++
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'
P-96732
RazzorFlame
» 2013-11-19 21:56:45
Nie wczytuj tak z pliku. Użyj plik.read((char*)&zmienna_znakowa, 1);
P-96736
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
P-96762
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:

C/C++
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
P-96844
« 1 »
  Strona 1 z 1