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

Rozdział 32 - Odczytywanie tekstu z pliku

Ostatnio zmodyfikowano 2016-01-24 12:52
Autor Wiadomość
Monika90
» 2016-01-24 11:00:40
funkcja getline ciut różni się w nowym standardzie c++11.
To nie ona jest winna, tylko zastąpienie operator void* przez explicit operator bool w nowym standardzie (http://en.cppreference.com/w​/cpp/io/basic_ios/operator_bool).

Więc jeżeli chcesz wczytać zawartość pliku linia po linii, to robisz to tak
C/C++
string line;
while( getline( file, line ) )
{
    cout << line << endl;
}

albo tak
C/C++
for( string line; getline( file, line ); )
{
    cout << line << endl;
}
ten drugi sposób jest wg mnie gorszy, to jest nadużycie pętli for, ale niektórzy tak piszą.

Kody te są równoważne tym
C/C++
string line;
while( !getline( file, line ).fail() )
{
    cout << line << endl;
}
C/C++
for( string line; !getline( file, line ).fail(); )
{
    cout << line << endl;
}
Bo poprawność wczytania należy sprawdzać za pomocą !fail(), a nie za pomocą good(). getline zwraca referencję do strumienia, a użycie strumienia jako warunku if czy while, jest równoważne użyciu zanegowanego wyniku wywołania  funkcji fail() na tym strumieniu.


Kod z kursu można dostosować do współczesnego standardu w taki sposób
C/C++
string wiersz;
for( bool bWczytano = !getline( plik, wiersz ).fail(); bWczytano; bWczytano = !getline( plik, wiersz ).fail() )
     cout << wiersz << endl;


albo w taki
C/C++
string wiersz;
for( bool bWczytano = bool( getline( plik, wiersz ) ); bWczytano; bWczytano = bool( getline( plik, wiersz ) ) )
     cout << wiersz << endl;


albo w taki
C/C++
string wiersz;
for( bool bWczytano = !!getline( plik, wiersz ); bWczytano; bWczytano = !!getline( plik, wiersz ) )
     cout << wiersz << endl;

Tylko po co tak kombinować?



Co trzeba zrobić, by w pętli znów wypisywało od pierwszej?
Musisz się cofnąć na początek pliku
C/C++
file.seekg( 0 );

jak to nie zadziała to tak
C/C++
file.clear();
file.seekg( 0 );
P-143945
mateczek
» 2016-01-24 12:52:57
Dzięki za wyjaśnienia :). Ja nie ukrywam że moja znajomość c++ to trochę czytania trochę przykładów i jak widać nie zawsze wiadomo co z czym do końca ugryźć
P-143955
1 « 2 »
Poprzednia strona Strona 2 z 2