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

Rozdział 34 - Zadnie 2 [trudne]

Ostatnio zmodyfikowano 2014-06-20 12:58
Autor Wiadomość
Webmast-er
Temat założony przez niniejszego użytkownika
Rozdział 34 - Zadnie 2 [trudne]
» 2014-06-20 12:58:43
Mam problem z programem, który pisze pod zadanie 2 z kursu C++ (Rozdział 34). Po skompilowaniu program wyświetla zapętlone "Bledne dane w wierszu nr 5!" (A w plik txt znajduje się 5 wierszy). Moim zdaniem program nie wyłapuje końca w zawartości pliku.

C/C++
#include <iostream>
#include <fstream>

using namespace std;

bool czyNowyWiersz( ifstream & plik )
{
    char znak;
    while( true )
    {
        plik.clear();
        znak = plik.peek(); //sprawdzamy jaki kolejny znak zostanie zwrócony przez operację odczytu
        if( plik.fail() || plik.bad() )
        {
            return false; //wystąpił błąd odczytu danych
        }
       
        if( !isspace( znak ) )
        {
            return false; //pobrany znak nie jest białym znakiem
        }
       
        plik.get( znak ); //odczytujemy biały znak z pliku
        if( plik.fail() || plik.bad() )
        {
            return false; //wystąpił błąd odczytu danych
        }
       
        if( znak == '\n' )
        {
            return true;
        }
    }
}

bool WczytywaniezPliku_zad2()
{
    ifstream plik;
    plik.open( "tekst4.txt" );
    if( plik.fail() )
    {
        return false;
    }
   
    int wiersz = 0;
    bool blad;
    while( !plik.eof() )
    {
        wiersz++;
        blad = false;
        int wczytana, suma = 0;
        while( !czyNowyWiersz( plik ) )
        {
            plik >> wczytana;
            if( plik.good() )
            {
                suma += wczytana;
            }
            else
            {
                cout << "Bledne dane w wierszu nr " << wiersz << "!" << endl;
                blad = true;
               
                // Czyszczenie flag oraz omijanie nieoczekiwanych znaków
                plik.clear();
                char znak;
                plik >> znak;
            }
        }
       
        if( blad == false )
        {
            cout << suma << endl;
        }
    }
    plik.close();
    return true;
}

int main()
{
    cout << "obsluga plikow 2" << endl << endl;
    if( !WczytywaniezPliku_zad2() )
    {
        cout << "Nie mozna otworzyc pliku!" << endl;
    }
    return 0;
}
P-112370
« 1 »
  Strona 1 z 1