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

Rozdział 35 zadanie 1

Ostatnio zmodyfikowano 2016-09-25 21:32
Autor Wiadomość
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ę
P-151916
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:

C/C++
while( !plik.eof() )
{
    std::string sWiersz;
    std::getline( plik, sWiersz ); //odczytujemy wiersz z pliku
}
P-151926
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
C/C++
while( !plik.eof() )
{
    std::string sWiersz;
    std::getline( plik, sWiersz );
    if( plik.bad() ) //podczas próby odczytania danych wystąpił błąd sprzętowy
    {
        plik.close();
        return false; //wychodzimy z funkcji i informujemy, że odczytanie pliku zakończyło się niepowodzeniem
    }
    std::cout << sWiersz << std::endl;
}

Edit:
Przykład:
Ten przykład tylko ilustruje jak można to zrobić (jest uproszczony, aby nie zaciemniać).
P-151928
igawar
» 2016-09-22 23:44:45
Oj, widzę, że jeszcze dłuuuga droga przede mną :(
P-151934
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:

C/C++
while( !plik.eof() )
{
    std::string sWiersz;
    std::getline( plik, sWiersz ); //odczytujemy wiersz z pliku
}
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ść.


P-152022
1 « 2 »
Poprzednia strona Strona 2 z 2