Operator >> nie wczytuje ostatniej wartości, znaku, itp.
Ostatnio zmodyfikowano 2014-08-21 20:23
Sorbet Temat założony przez niniejszego użytkownika |
Operator >> nie wczytuje ostatniej wartości, znaku, itp. » 2014-08-21 19:58:18 Mój kod z zadania domowego z Lekcji 33: #include <fstream> #include <iostream> #include <string>
bool wczytajPlik( std::string nazwaPliku ) { int suma = 0; std::ifstream plik; plik.open( nazwaPliku.c_str() ); if( !plik.good() ) return false; while( true ) { int n; plik >> n; if( plik.good() ) suma += n; else break; } std::cout << "Wynik: " << suma << std::endl; return true; }
int main() { if( !wczytajPlik( "input.txt" ) ) std::cout << "Nie udalo sie otworzyc pliku!" << std::endl; std::cout << "Nacisnij [Enter]..."; std::cin.get(); return 0; }
Wyjscie przy "1 1 1 1" w pliku input.txt: 3 przy "10 10": 10 przy "1": 0 Czy robię coś nie tak? Czy coś jest nie tak z moim kompilatorem? Proszę o pomoc, bo strasznie mnie to frustruje. |
|
Monika90 |
» 2014-08-21 20:01:54 źle sprawdzassz czy operacja odczytu się udała, zamiast if (plik.good()) powinno być if (!plik.fail()), albo po prostu if (plik) |
|
Sorbet Temat założony przez niniejszego użytkownika |
» 2014-08-21 20:06:35 |
|
Monika90 |
» 2014-08-21 20:17:48 good zwraca true jeżeli operacja się powiodła oraz nie osiągnieto końca pliku, więc jest sens czytać dalej. Jeżeli operacja się powiodła ale podczas jej wykonywania osiągnięto koniec pliku, to good zwraca false.
fail zwraca true jeżeli operacja się nie udała, false w przeciwnym wypadku.
W zasadzie good jest bezużyteczne, sprawdzać czy plik udało się otworzyć też możesz za pomocą !plik.fail() |
|
Sorbet Temat założony przez niniejszego użytkownika |
» 2014-08-21 20:20:10 A po porstu if(plik)? |
|
pekfos |
» 2014-08-21 20:21:58 To to samo co if(!plik.fail()). |
|
Sorbet Temat założony przez niniejszego użytkownika |
» 2014-08-21 20:23:42 Dzięki wielkie. Może dobrze by było poprawić tamten fragment kursu, żeby nie było już więcej takich pytań? |
|
« 1 » |