Czy metoda eof() musi wczytać endl, żeby zwrócić wartość false?
Ostatnio zmodyfikowano 2016-04-24 18:30
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. 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. |
|
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 while( 1 ) { fin.getline( napis, 50 ); if( fin.eof() ) break; cout << napis << endl; } |
|
Monika90 |
» 2016-04-24 11:42:04 Mateczek, twoja wersja nie wypisze ostatniego wiersza gdy nie kończy się on znakiem \n. |
|
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ć while( fin.getline( napis, 50 ) ) { cout << napis << endl; } |
|
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? |
|
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. |
|
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. |
|
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. |
|
1 « 2 » 3 |