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

Metody klasy ifstream - odczyt z pliku

Ostatnio zmodyfikowano 2013-12-11 20:00
Autor Wiadomość
kitsss
Temat założony przez niniejszego użytkownika
Metody klasy ifstream - odczyt z pliku
» 2013-12-10 20:06:58
Zawartość notatnika:
3
2
k
1
09

C/C++
do
{
    int liczba;
    plik >> liczba;
    if( plik.fail() )
    {
        cout << "Tu jest fail" << endl;
        continue;
    }
    cout << liczba << endl;
   
} while( plik.good() );


Chciałem, żeby program bezproblemowo nadpisywał liczby z wiersza z notatnika w zmienną, a następnie ją wyświetlał. Tak się dzieję, ale chciałem również, żeby w przypadku gdy napotka błąd logiczny poinformował o tym, niczym się nie przejmował i przeszedł do następnego wiersza w notatniku powtarzając algorytm. Tymczasem na ekranie:
3
2
tu jest fail

A gdy w ostatniej linijce zamieszcze:
{ while( plik.eof() );
 Pętli się w nieskończonośc z tym samym wierszem w pliku zamiast przejsc do nastepnego.
P-98933
kitsss
Temat założony przez niniejszego użytkownika
» 2013-12-10 22:50:48
A chciałem, by program uczynił tak:
3
2
Tu jest fail
1
09

Nikt nie ma żadnych pomysłów :) ?
P-98951
Adik80
» 2013-12-11 11:06:46
Moze zamien na !plik.eof()
P-98963
kitsss
Temat założony przez niniejszego użytkownika
» 2013-12-11 17:11:28
Nic to nie daje, pętli w nieskończoność aż do błedu.
P-98988
Adik80
» 2013-12-11 19:10:45
to dodaj jeszcze po if(plik.fail() plik.clear() i plik.ignore()
P-98994
kitsss
Temat założony przez niniejszego użytkownika
» 2013-12-11 20:00:32
Adik80, z pełnią podziwu dla Ciebie program działa jak należy! Zachowuje również swoją uniwersalność, jeśli w notatnik wpisze jeszcze wiele dodatkowych głupot.
Niezbędna jest ta funkcja ignore(), doszedłem bowiem wcześniej do tego, żeby użyć funkcji clear(), ale to nic nie dało, dopiero te dwie funkcje razem dały oczekiwany efekt.
Może komuś pomoże ta informacja, więc wklejam poprawny kod źródłowy:
C/C++
do
{
    int liczba;
    plik >> liczba;
    if( plik.fail() )
    {
        cout << "Tu jest fail" << endl;
        plik.clear();
        plik.ignore();
        continue;
    }
    cout << liczba << endl;
} while( !plik.eof() );

P-99001
« 1 »
  Strona 1 z 1