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

[C++] Kontrola błędów

Ostatnio zmodyfikowano 2017-04-30 15:19
Autor Wiadomość
kombatdavid123
Temat założony przez niniejszego użytkownika
[C++] Kontrola błędów
» 2017-04-30 09:01:00
Witam, potrzebuje jakiejś wskazówki gdyż męcze się z następującym zadaniem :

Napisz program, który dla każdego wiersza w pliku:
wczyta liczby i wypisze ich sumę w przypadku, gdy wszystkie liczby uda się wczytać;
wypisze komunikat o błędnych danych, jeżeli wystąpi błąd podczas wczytywania liczb (komunikat ma wyświetlać numer wiersza, w którym wystąpił błąd).

Problem mam taki ,że po odpaleniu programu nieskończenie wiele razy wypisuje mi "Blad w wierszu 1!"...
Zawartosc pliku "dane2.txt" :

1 2 3 4 5
1a 2b 3c 4d
13 45 64 21
a1 34 11 01

C/C++
#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>

using namespace std;

bool WCZYTAJ_LICZBE( ifstream & PLIK, int LICZBA );

bool czyNapotkanoZnakNowegoWiersza( ifstream & plik );

bool WCZYTAJ_PLIK( string NAZWA_PLIKU );

int main()
{
    if( WCZYTAJ_PLIK( "dane2.txt" ) )
         cout << "Udalo sie otworzyc plik!" << endl;
    else
         cout << "Nie udalo sie otworzyc pliku!" << endl;
   
    return 0;
}

bool czyNapotkanoZnakNowegoWiersza( ifstream & plik )
{
    char cZnak;
    for(;; ) //nieskończona pętla
    {
        plik.clear();
        cZnak = 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( cZnak ) )
             return false; //pobrany znak nie jest białym znakiem
       
        plik.get( cZnak ); //odczytujemy biały znak z pliku
        if( plik.fail() || plik.bad() )
             return false; //wystąpił błąd odczytu danych
       
        if( cZnak == '\n' )
             return true;
       
    } //for
}

bool WCZYTAJ_LICZBE( ifstream & PLIK, int LICZBA )
{
    PLIK >> LICZBA;
    if( PLIK.fail() || PLIK.bad() )
    {
        return false;
    }
   
    return true;
}

bool WCZYTAJ_PLIK( string NAZWA_PLIKU )
{
    int LICZBA = 0;
    int WIERSZ = 1;
    int SUMA = 0;
   
    ifstream PLIK;
    PLIK.open( NAZWA_PLIKU.c_str() );
   
    if( !PLIK.good() )
    {
        return false;
    }
   
    while( !PLIK.eof() )
    {
        if( PLIK >> LICZBA )
        {
            SUMA += LICZBA;
            continue;
        }
        else
        if( PLIK.fail() || PLIK.bad() )
        {
            cout << "Blad w wierszu " << WIERSZ << "!" << endl;
            PLIK.clear();
            continue;
        }
        else
        if( czyNapotkanoZnakNowegoWiersza( PLIK ) )
        {
            cout << SUMA << endl;
            WIERSZ++;
            SUMA = 0;
        }
    }
   
    PLIK.close();
   
    return true;
}
[ cpp / ]
P-160612
DejaVu
» 2017-04-30 15:19:30
P-160621
« 1 »
  Strona 1 z 1