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

[C++] Nie wykrywa EOF

Ostatnio zmodyfikowano 2014-12-12 21:11
Autor Wiadomość
Vister26
Temat założony przez niniejszego użytkownika
[C++] Nie wykrywa EOF
» 2014-12-09 23:00:33
Oto fragment kodu, który ma wczytywać znaki do momentu napotkania EOF.
C/C++
fstream plik;
plik.open( "pozycje.txt", ios::in );

while( !plik.eof() )
{
    int licznik;
    memset( dane, 0, 20 );
    licznik = plik.tellg();
    plik.getline( dane, 20 );
   
    plik.clear();
    plik.seekg( licznik, ios::beg );
    /*-- reszta kodu --*/
}

plik.close();

Niestety pętla nie zatrzymuje się. Gdzie jest błąd?
P-122612
darko202
» 2014-12-09 23:36:43
1. może plik nie ma znacznika końca pliku
2. sprawdzaj co odczytuje - wyświetl na ekranie
3. sprawdź status czytania plik.getline

dziś jak spojrzałem to zastanowiło mnie
4. std::istream::seekg  ? 
na http://www.cplusplus.com/reference/istream/istream/seekg/
flaga
ios_base::beg beginning of the stream

to by znaczyło, że zaczyna od początku pliku chyba ?
tzn. program nie daje mu osiągnąć końca
P-122614
Monika90
» 2014-12-10 16:33:01
Nie widzę sensu w tym twoim kodzie, niestety. Spróbuj może tego:

C/C++
const int rozmiar = 20;
char wiersz[ rozmiar ];
while( plik.getline( wiersz, rozmiar ) )
{
    std::cout << wiersz << '\n';
}

if( !plik.eof() && plik.gcount() == rozmiar - 1 )
     std::cout << "Wiersz zbyt długi!\n";

P-122631
Vister26
Temat założony przez niniejszego użytkownika
» 2014-12-12 21:11:10
Ok, dzięki! Zbyt pobieżnie przeczytałem o powyższych funkcjach(metodach), ale już ogarniam.
P-122766
« 1 »
  Strona 1 z 1