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

Rozdział 34 - problem z pierwszym zadaniem domowym

Ostatnio zmodyfikowano 2017-05-08 15:42
Autor Wiadomość
Pralkarz
Temat założony przez niniejszego użytkownika
Rozdział 34 - problem z pierwszym zadaniem domowym
» 2017-05-08 15:42:51
Z niewiadomych przyczyn program nie wczytuje mi cyfry "2". Oto kod:

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

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

bool wczytajZnak( std::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( std::string sNazwaPliku )
{
    std::ifstream plik;
    plik.open( sNazwaPliku.c_str() );
   
    if( !plik.good() )
         return false;
   
    int suma = 0;
   
    while( !plik.eof() )
    {
        int iLiczba;
        char cZnak;
       
        if( !wczytajLiczbe( plik, iLiczba, suma ) && plik.bad() )
             return false;
        else if( !wczytajZnak( plik, cZnak ) )
        {
            if( plik.bad() )
                 return false;
            else
                 break;
           
        }
    }
   
    std::cout << std::endl << "Suma: " << suma;
   
    plik.close();
   
    return true;
}

int main()
{
    if( !odczytajPlik( "plik.txt" ) )
         std::cout << "Wystapil jakis blad." << std::endl;
   
}


A oto co dostaję w konsoli:
1 321 9 5 3
Suma: 339

EDIT: Udało mi się naprawić. Dałem fragment funkcji wczytajLiczbe w nieskończoną pętlę i wszystko działa jak należy. Wcześniej, gdy dwie liczby były "obok siebie" druga z nich była traktowana jako char i przez to niewypisywana na ekran.
P-160847
« 1 »
  Strona 1 z 1