Nadal nie rozumiem w 100%, ale mam nadzieję że będziesz miał do mnie cierpliwość ;)
mając EOF
kluczowe pytanie:
mając powiedzmy plik mojedane.txt:
Kopiuj
pierwsza
druga
33333
444444
piata
w którym miejscu znajduje się EOF? Odpowiedź "na końcu pliku" mnie nie zadowala ponieważ:
program:
Kopiuj
#include <iostream>
#include <fstream>
#include <string>
int main() {
std::cout << std::boolalpha;
std::string moj_string;
std::ifstream obiekt_pliku;
obiekt_pliku.open("mojedane.txt");
while(bool warunek = obiekt_pliku.good())
{
obiekt_pliku >> moj_string;
std::cout << warunek
<< " " << moj_string << std::endl;
}
obiekt_pliku.close();
return 0;
}
Według mnie po skończeniu linii 5 - "piata" powinien przy następnym warunku obiekt_pliku.good() zwrócić false ponieważ według mnie zaraz po "piata" znajduje się EOF. Ale tak nie jest bo wynik programu to:
Kopiuj
user@desktop-pc:~/Pulpit/matura-testowanie$ ./test
true pierwsza
true druga
true 33333
true 444444
true piata
true piata
user@desktop-pc:~/Pulpit/matura-testowanie$
Więc jak widać w 6 wywołaniu pętli while warunek jest spełniony czego nie rozumiem. (w 6 wywołaniu powinien czytać 6 linijkę pliku której nie ma więc tam musi być EOF)
ps:
- następnie obiekt_pliku.good() jeszcze jest true bo nie próbowałes czytać z EOFa (tylko co próbowałem czytać? 6-tą linię której nie ma)
- spróbujesz czytać z EOFa, nic nie wczytasz (dopiero teraz good() będzie false), ale masz nadal zapamiętaną starą wersję swojej zmiennej (i co z tego skoro najpierw jest sprawdzany warunek a później instrukcje, a nie na odwrót. Więc skoro będzie false to poniższe podpunkty nie powinny mieć miejsca)
- wypiszesz tą starą wartość
- przerwiesz pętlę do masz good() == false
ShalomShalom