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

Lekcja 34. zadanie 1

Ostatnio zmodyfikowano 2015-02-11 22:23
Autor Wiadomość
MarcinEU
Temat założony przez niniejszego użytkownika
Lekcja 34. zadanie 1
» 2015-02-11 14:45:26
Witam!

Mam mały problem z zadaniem z kursu:

Napisz program, który wczyta z pliku liczby całkowite i wypisze je na ekranie. Wszelkie nieprawidłowe znaki mają zostać pominięte. Program ma wypisać również sumę wszystkich wczytanych liczb. Przykładowa zawartość pliku z danymi:
a 1 2 321b9 ac.de ef#@g 5 #3
Oczekiwane standardowe wyjście programu dla przykładowego zestawu danych:
1 2 321 9 5 3
Suma liczb wynosi: 341

Program wypisuje liczby i je sumuje, ale pomija jedną z nich (2). Nie mam pojęcia dlaczego. Mógłby mi ktoś z tym pomóc?

Oto kod:
C/C++
#include <iostream>
#include <fstream>

using namespace std;

bool wczytajLiczbe( ifstream & plik, int & iLiczba )
{
    plik.clear();
    plik >> iLiczba;
    if( plik.bad() )
    {
        plik.close();
        return false;
    } else
    if( plik.fail() )
    {
        return false;
    } else
         cout << iLiczba << " ";
   
    return true;
}

bool wczytajZnak( ifstream & plik, char & cZnak )
{
    plik.clear();
    plik >> cZnak;
    if( plik.bad() )
    {
        plik.close();
        return false;
    } else
    if( plik.fail() )
         return false;
   
    return true;
}

bool odczytajPlik( string sNazwa )
{
    ifstream plik;
    plik.open( sNazwa.c_str() );
    if( !plik.good() )
    {
        cout << "Nie udalo sie wczytac pliku" << endl;
        plik.close();
        return false;
    }
   
    int iSuma = 0;
   
    while( !plik.eof() )
    {
        int iLiczba;
        char cZnak;
       
        if( !wczytajLiczbe( plik, iLiczba ) && plik.bad() )
             return false;
        else
             iSuma += iLiczba;
       
        if( wczytajZnak( plik, cZnak ) == false )
        {
            if( plik.bad() )
                 return false;
            else
                 break;
           
        }
    }
   
    cout << endl << "Suma liczb wynosi: " << iSuma << endl;
    plik.close();
    return true;
}

int main()
{
    if( odczytajPlik( "cpp0x.txt" ) == true )
         cout << "Plik zostal pomyslnie wczytany" << endl;
   
    return 0;
}
P-126339
Winner_Of_Death
» 2015-02-11 15:17:02
P-126342
MarcinEU
Temat założony przez niniejszego użytkownika
» 2015-02-11 15:33:57
No dobra, ale nie za bardzo nadal wiem, jak by to przerobić :/ Mógłby mnie ktoś naprowadzić? Bo nie wiem jak by to za bardzo można było ruszyć ;/

C/C++
if( !wczytajLiczbe( plik, iLiczba ) && plik.bad() )
     return false;
else
     iSuma += iLiczba;

if( wczytajZnak( plik, cZnak ) == false )
{
    if( plik.bad() )
         return false;
    else
         break;
   
}
P-126343
MarcinEU
Temat założony przez niniejszego użytkownika
» 2015-02-11 22:23:22
Dobra, już sobie z tym poradziłem za pomocą .get() chociaż nie za bardzo wiem jak to do końca działa :/ Dzięki za pomoc :)
P-126382
« 1 »
  Strona 1 z 1