[Rozdział 34] - brak zrozumienia działania jednego z przykładów;
Ostatnio zmodyfikowano 2017-03-23 15:03
Qabrix Temat założony przez niniejszego użytkownika |
[Rozdział 34] - brak zrozumienia działania jednego z przykładów; » 2017-03-23 14:44:20 Witam, rozpoczynam swoją przygodę z nauką języka C++ i jeszcze nie wszystkie mechanizmy jego działania są mi do końca znane. Dotychczas, większość zadań oraz zrozumienie przykładów z kursu, przy ich analizie, nie sprawiło mi większych problemów. Aczkolwiek przykład z rozdziału 34 kursu, jest dla mnie zagadkowy. Poniżej wklejam nieprzerobiony kod przykładu: #include <string> #include <fstream> #include <iostream>
bool wczytajLiczbe( std::ifstream & plik, int & iLiczba ) { plik.clear(); plik >> iLiczba; if( plik.bad() ) { std::cout << "Wystapil blad sprzetowy!" << std::endl; plik.close(); return false; } else if( plik.fail() ) { std::cout << "Nie udalo sie wczytac liczby!" << std::endl; return false; } else std::cout << "Liczba = " << iLiczba << std::endl; return true; }
bool wczytajZnak( std::ifstream & plik, char & cZnak ) { plik.clear(); plik >> cZnak; if( plik.bad() ) { std::cout << "Wystapil blad sprzetowy!" << std::endl; plik.close(); return false; } else if( plik.fail() ) { std::cout << "Nie udalo sie wczytac znaku!" << std::endl; return false; } return true; }
bool odczytajPlik( std::string sNazwaPliku ) { std::ifstream plik; plik.open( sNazwaPliku.c_str() ); if( !plik.good() ) { std::cout << "Nie udalo sie otworzyc pliku." << std::endl; return false; } while( !plik.eof() ) { int iLiczba; char cZnak; if( !wczytajLiczbe( plik, iLiczba ) && plik.bad() ) return false; else if( !wczytajZnak( plik, cZnak ) ) { if( plik.bad() ) return false; else break; } std::cout << "Napotkany znak = '" << cZnak << "'" << std::endl; } plik.close(); return true; }
int main() { if( odczytajPlik( "cpp0x.txt" ) ) std::cout << "Plik zostal wczytany!" << std::endl; return 0; } pod plikiem cpp0x.txt kryje się treść: "1 d 3 4 5 6 7 8" gdzie " " oznaczają - początek i koniec pliku. po odpaleniu programu, w konsoli otrzymuje: ----------------------------------------------------- Liczba = 1 Napotkany znak = 'd' Liczba = 3 Napotkany znak = '4' Liczba = 5 Napotkany znak = '6' Liczba = 7 Napotkany znak = '8' Nie udalo sie wczytac liczby! Nie udalo sie wczytac znaku! Plik zostal wczytany! Process returned 0 (0x0) execution time : 0.049 s Press any key to continue. ------------------------------------------------------ pytanie jest następujące: dlaczego gdy program napotka znak 'd' to nie zwraca informacji "Nie udalo sie wczytac liczby!"? Z góry dziękuję za wyjaśnienie :) Oraz przepraszam jeżeli pytanie wyda się głupie. |
|
Qabrix Temat założony przez niniejszego użytkownika |
Problem rozwiązany » 2017-03-23 15:03:49 Po szczegółowym zagłębieniu się w kod, zrozumiałem jego działanie. Bezpodstawnie zakładałem, że wczytaj liczbę i wczytaj znak, wczytają znak na tej samej pozycji. Zamykam temat. |
|
« 1 » |