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

Rozdział 34 , zadanie 2 . Pomoc

Ostatnio zmodyfikowano 2017-09-27 16:55
Autor Wiadomość
kundelko
Temat założony przez niniejszego użytkownika
Rozdział 34 , zadanie 2 . Pomoc
» 2017-09-27 16:14:01
Witam prosił bym o sprawdzenie poprawności mojego zadania lub ewentualne wskazówki . Z góry dziękuje ;)
zad.
[trudne zadanie] 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).

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

using namespace std;
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
}

int main()
{
    int a = 0, b, licznik = 1;
    bool czyBlad = false;
    ifstream plik;
    plik.open( "C:\\Users\\Dominik\\Desktop\\t.txt" );
    if( !plik.good() )
         cout << "blad plike" << endl;
   
   
    while( !plik.eof() )
    {
       
        while( !czyNapotkanoZnakNowegoWiersza( plik ) )
        {
            if( plik.eof() )
                 break;
           
            plik >> b;
            if( plik.fail() )
            {
                plik.clear();
                plik.ignore();
                czyBlad = true;
            }
            else
            {
                a = a + b;
            }
        }
        if( plik.fail() || czyBlad == true )
        {
            cout << "blad w lini:  " << licznik << endl;
        }
        else
        {
            if( plik.eof() )
                 break;
           
            cout << a << endl;
        }
       
        a = 0;
        licznik++;
        czyBlad = false;
       
    }
    plik.close();
    return 0;
}
P-165271
pekfos
» 2017-09-27 16:55:02
Jeśli działa poprawnie, to raczej jest zrobione poprawnie.
P-165272
« 1 »
  Strona 1 z 1