Rozdział 35 zadanie 1
Ostatnio zmodyfikowano 2016-09-25 21:32
carlosmay |
» 2016-09-22 19:59:33 Jeżeli chcesz korzystać z plik.eof() , używaj tej metody bezpośrednio po próbie odczytu z pliku, a nie w warunku pętli. Najczęściej używa się while( plik >> zmienna ) . Następuje tutaj konwersja na typ bool . true == udane wczytywanie, false == nieudane wcztywanie. Edit: Brałaś nawet udział w temacie, w którym zwrócono na to uwagę |
|
igawar |
» 2016-09-22 23:05:13 Poprawiłam while( !plik.eof() ) na while (plik>>proba) i działa dobrze :) Zapamiętam choć nie bardzo rozumiem czemu nie może być tak jak ja miałam. Sama tego nie wymyśliłam. W lekcji 34 kursu jest taki przykład: Metoda ifstream::eof Metoda eof, należąca do klasy std::ifstream zwraca prawdę, jeżeli ostatnio wykonana operacja odczytu danych została zakończona z powodu osiągnięcia końca pliku. Informację tą bardzo często wykorzystuje się wtedy, gdy chcemy odczytać zawartość całego pliku nie wiedząc ile danych się w nim znajduje. Przykład: while( !plik.eof() ) { std::string sWiersz; std::getline( plik, sWiersz ); } |
|
carlosmay |
» 2016-09-22 23:23:22 Sama tego nie wymyśliłam. W lekcji 34 kursu jest taki przykład: |
Jeżeli chcesz korzystać z plik.eof(), używaj tej metody bezpośrednio po próbie odczytu z pliku, a nie w warunku pętli. |
Wycięte z kursu
while( !plik.eof() ) { std::string sWiersz; std::getline( plik, sWiersz ); if( plik.bad() ) { plik.close(); return false; } std::cout << sWiersz << std::endl; } |
Edit: Ten przykład tylko ilustruje jak można to zrobić (jest uproszczony, aby nie zaciemniać). |
|
igawar |
» 2016-09-22 23:44:45 Oj, widzę, że jeszcze dłuuuga droga przede mną :( |
|
Monika90 |
» 2016-09-25 21:32:46 Metoda ifstream::eof Metoda eof, należąca do klasy std::ifstream zwraca prawdę, jeżeli ostatnio wykonana operacja odczytu danych została zakończona z powodu osiągnięcia końca pliku. Informację tą bardzo często wykorzystuje się wtedy, gdy chcemy odczytać zawartość całego pliku nie wiedząc ile danych się w nim znajduje. Przykład:
while( !plik.eof() ) { std::string sWiersz; std::getline( plik, sWiersz ); }
|
Autor kursu nie wiedział że może prowadzić to do problemów, np. odczytania na końcu dodatkowej pustej linii, której w pliku tak naprawdę nie ma. I jeszcze zadeklarował string wewnątrz pętli, co pewnie zmniejszy wydajność. |
|
1 « 2 » |