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

Czy metoda eof() musi wczytać endl, żeby zwrócić wartość false?

Ostatnio zmodyfikowano 2016-04-24 18:30
Autor Wiadomość
Monika90
» 2016-04-24 11:17:55
Po pierwsze, bez endl na końcu program nie wypisze ostatniego wersu:
Nie wypisze bo ten wiersz się jeszcze nie zapisał, bufor nie został opróżniony, a endl wymusza zapis, podobnie jak flush, lub zamknięcie pliku.


Po drugie, gdy napotka '\n', interpretuje jako koniec pliku (jest to już w pierwszym wierszu, więc go nie wypisuje):
Nic się nie wczyta, dlatego że żadne dane nie zostały zapisane do pliku, czekają sobie w buforze.


C/C++
while( !fin.eof() )
{
    fin.getline( napis, 50 );
    cout << napis << endl;
}
A ta pętla jest błędna i odczyta jeden wiersz więcej niż faktycznie w pliku jest.
P-147584
mateczek
» 2016-04-24 11:38:34
A ta pętla jest błędna i odczyta jeden wiersz więcej niż faktycznie w pliku jest.
Dokładnie !!!


Jeśli chcesz z eof to tak powinno być dobrze
C/C++
while( 1 )
{
    fin.getline( napis, 50 );
    if( fin.eof() ) break; // sprawdzasz eof po prubie czytania i wtedy przerywasz !!!
   
    cout << napis << endl; // gdy eof już nie wypisuje
}
P-147585
Monika90
» 2016-04-24 11:42:04
Mateczek, twoja wersja nie wypisze ostatniego wiersza gdy nie kończy się on znakiem \n.
P-147586
mateczek
» 2016-04-24 11:48:21
Mateczek, twoja wersja nie wypisze ostatniego wiersza gdy nie kończy się on znakiem \n.

Racja :) chciałem coś wykombinować z tym eof i faktycznie źle.

Ja zawsze czytam w ten sposób. Z tym eof chciałem tylko na potrzeby wątku coś wymyślić
C/C++
while( fin.getline( napis, 50 ) )
{
    cout << napis << endl;
}
P-147587
Lucas535
Temat założony przez niniejszego użytkownika
» 2016-04-24 11:48:23
Nie rozumiem dlaczego moja pętla jest błędna. Najpierw sprawdzam czy w pliku są jeszcze dane jak są to je wypisuje, co jest nie tak?
P-147588
Monika90
» 2016-04-24 11:54:58
eof() nie sprawdza czy w pliku są jeszcze dane. Jeżeli odczytasz wszystko z pliku, to eof() wciąż zwróci false, dopiero próba czytania za końcem pliku spowoduje, że eof() zacznie zwracać true.
P-147589
Lucas535
Temat założony przez niniejszego użytkownika
» 2016-04-24 12:22:51
A ta pętla jest błędna i odczyta jeden wiersz więcej niż faktycznie w pliku jest.

Wpisuję tekst diagnostyczny do pętli i wykonuje się tyle razy ile jest wierszy w pliku.
P-147590
carlosmay
» 2016-04-24 13:17:41
Wpisuję tekst diagnostyczny do pętli i wykonuje się tyle razy ile jest wierszy w pliku.
Pewny jesteś?

Podaj zawartość pliku.
P-147594
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona