Poziom 4 nr 32, obsluga "if(plik.good())"
Ostatnio zmodyfikowano 2016-04-23 17:04
ein_har_jar Temat założony przez niniejszego użytkownika |
Poziom 4 nr 32, obsluga "if(plik.good())" » 2016-04-23 16:08:32 Linia 34. Operacja zawarta w instrukcji warunkowej nie zostaje wykonana(nie opdala funkcji wykonajOperacje()), jeśli ostatni odczytany przez program znak jest ostatnim znakiem zawartym z pliku. "plik.good()" wywala fałsz, bo odczytał wszystkie znaki. Czy jest jest jakaś sprawna droga obejścia tego, poza: a)dodaniem szeregu warunków prowadzących do wykonania tego if'a +1 raz, b)dostawieniem jeszcze znaku na końcu pliki tekstowego #include <fstream> #include <iostream> #include <string>
void wykonajOperacje( int liczba1, std::string napis, int liczba2 ) { std::cout << "\tWykonuje operacje: " << liczba1 << napis << liczba2 << std::endl; if( napis == "dodac" ) { std::cout << liczba1 << " + " << liczba2 << " = " << liczba1 + liczba2 << std::endl; } else if( napis == "odjac" ) { std::cout << liczba1 << " - " << liczba2 << " = " << liczba1 - liczba2 << std::endl; } else { std::cout << "Nieznana operacja \"" << napis << "\" - nie mozna wykonac obliczen." << std::endl; } }
bool wczytajPlik( std::string nazwaPliku ) { std::ifstream plik; plik.open( nazwaPliku.c_str() ); if( !plik.good() ) return false; while( true ) { int a; std::string b; int c; plik >> a >> b >> c; std::cout << "\tOdczytalem plik: " << a << b << c << std::endl; if( plik.good() ) wykonajOperacje( a, b, c ); else break; } return true; }
int main() { if( !wczytajPlik( "obliczenia.txt" ) ) std::cout << "Nie udalo sie otworzyc pliku!" << std::endl; return 0; }
Z góry wielkie dzięki! |
|
Monika90 |
» 2016-04-23 17:04:49 if( plik.good() ) wykonajOperacje( a, b, c );
Zamiast plik.good() powinno być !plik.fail(), zapomnij o plik.good(), plik.good() ma pewnie jakieś zastosowania, ale na ogół nie jest potrzebne, a już na pewno nie jest do tego by sprawdzać poprawność ostatnio wykonanej operacji odczytu. |
|
« 1 » |