zad 34.1 Wczytanie liczb z pliku z pominięciem innych znaków
Ostatnio zmodyfikowano 2016-08-30 11:53
OddajcieBoja Temat założony przez niniejszego użytkownika |
zad 34.1 Wczytanie liczb z pliku z pominięciem innych znaków » 2016-08-29 20:25:12 Witam. Mój program zatrzymuje się na pierwszym napotkanym nieprawidłowym znaku. Od ponad godziny próbuję to naprawić, jednak bez skutku. Co zrobić, aby program działał prawidłowo? #include <iostream> #include <fstream> #include <string> using namespace std; bool wczytaniepliku( string nazwa ) { ifstream plik; plik.open( nazwa.c_str() ); if( !plik.good() ) return false; while( !plik.eof() ) { plik.clear(); int liczba; plik >> liczba; if( plik.fail() ) continue; cout << liczba << ", "; } plik.close(); return true; }
int main() { if( !wczytaniepliku( "plik.txt" ) ) cout << "nie dalo rady wczytac pliku :/" << endl; return 0; }
|
|
karambaHZP |
» 2016-08-29 20:37:57 Wczytując operatorem >> dane niezgodne z typem zmiennej, strumień łapie błąd i uniemożliwia dalsze działania. Czyść strumień po błędnych danych. |
|
OddajcieBoja Temat założony przez niniejszego użytkownika |
» 2016-08-29 23:09:01 Mam napisaną metodę ifstream::clear() na początku pętli, jak inaczej mam czyścić strumień? Przeglądam poprzednie rozdziały i nie widzę nic co mogło by pomóc. |
|
carlosmay |
» 2016-08-29 23:37:18 Mam napisaną metodę ifstream::clear() na początku pętli |
To tylko wyzerowanie flag, a jeszcze należy pozbyć się błędnych danych, z którymi nie radzi sobie operator >> . Jeśli nie usuniesz źródła błędu, w każdym obrocie pętli trafiasz na te same błędne dane (zapętlenie). Pokaż jak wygląda plik, a dopasujemy rozwiązanie. |
|
OddajcieBoja Temat założony przez niniejszego użytkownika |
» 2016-08-30 10:32:25 Dane w pliku wyglądają następująco: 32 2 knnfa 1 fda 423nn2 99 {}23 4
W sumie teraz zastanawiam się, czy mam napisać program tak, aby sam wykrył niechciane znaki, czy mam go po prostu ustawić specyficznie pod wybrany plik? |
|
carlosmay |
» 2016-08-30 10:51:30 { ifstream fin( nazwa_pliku ); if( fin.is_open() ) { int number; do { if( fin >> number ) { cout << number << ' '; } else { fin.clear(); fin.get(); } } while( !fin.eof() ); } else { cerr << "Lipa:\n"; } } plik.open( nazwa.c_str() ); |
Nie musisz konwertować stringa na cstringa od c++11. |
|
OddajcieBoja Temat założony przez niniejszego użytkownika |
» 2016-08-30 11:53:21 Dzięki za pomoc, program w końcu działa prawidłowo :) |
|
« 1 » |