[Lekcja 34] Pomijanie liczby
Ostatnio zmodyfikowano 2014-11-24 16:41
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? #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 |
|
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 |
|
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? |
|
« 1 » |