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

[Lekcja 34] Pomijanie liczby

Ostatnio zmodyfikowano 2014-11-24 16:41
Autor Wiadomość
pw1602
Temat założony przez niniejszego użytkownika
[Lekcja 34] Pomijanie liczby
» 2014-11-24 13:33:24
Czy ktoś mógłby dać mi podpowiedź dlaczego program nie wczytuje mi liczby: 2?

C/C++
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
bool bLiczba( ifstream & sPlik, int & nLiczba, int & nSuma )
{
    sPlik.clear();
    sPlik >> nLiczba;
    if( sPlik.bad() )
    {
        cout << "Wystapil problem sprzetowy!" << endl;
        sPlik.close();
        return false;
    } else
    if( sPlik.fail() )
    {
        cout << "Nieudane odczytanie liczby!" << endl;
        return false;
    } else
    {
        nSuma += nLiczba;
        cout << "Liczba: " << nLiczba << endl;
    }
    return true;
}
bool bZnak( ifstream & sPlik, char cZnak )
{
    sPlik.clear();
    sPlik >> cZnak;
    if( sPlik.bad() )
    {
        cout << "Wystapil blad sprzetowy!" << endl;
        sPlik.close();
        return false;
    } else
    if( sPlik.fail() )
    {
        cout << "Nie udalo sie wczytac znaku!" << endl;
        return false;
    }
    return true;
}
bool bOtwarcie( string sPlik )
{
    int nSuma = 0;
    ifstream plik;
    plik.open( sPlik.c_str() );
    if( !plik.good() )
         return false;
   
    while( !plik.eof() )
    {
        int nLiczba;
        char cZnak;
        if( !bLiczba( plik, nLiczba, nSuma ) && plik.bad() )
             return false;
        else
        if( !bZnak( plik, cZnak ) )
        {
            if( plik.bad() )
                 return false;
            else
                 break;
           
        }
        cout << "Napotkany znak: " << cZnak << endl;
    }
    plik.close();
    cout << "Suma: " << nSuma;
    return true;
}
int main()
{
    if( !bOtwarcie( "C++.txt" ) )
         cout << "Problem z otwarciem pliku!";
   
    return 0;
}
Plik zawiera: a 1 2 321b9 ac.de ef#@g 5 #3
P-121266
darko202
» 2014-11-24 14:55:03
zastanawia mnie linia
sPlik.clear();
z bool bLiczba(ifstream & sPlik, int & nLiczba, int & nSuma)

w którym czyścisz strumień wejściowy
to chyba nic więcej Ci już z niego nie przeczyta
P-121273
pw1602
Temat założony przez niniejszego użytkownika
» 2014-11-24 16:41:53
Nadal nie czyta mi 2.

Po za tym
sPlik.clear()
 ma za zadanie czyścić flagi błędów.

@Edit
Jeśli tylko w pliku przed 2 dodam cokolwiek to po włączeniu programu automatycznie nie czyta 3 i z 321 zostaje 21.

@Edit2
Czy to możliwe, że po przez to, że
sPlik >> cZnak
 czy tam
sPlik >> nLiczba
 pomija znaki białe to dwójka jest uważana, jako znak i zostaje pomijana?
P-121283
« 1 »
  Strona 1 z 1