mlOOdy Temat założony przez niniejszego użytkownika |
brak powrotu na początek pliku » 2016-03-07 21:16:50 Gdy sczytuję wszystkie dane z pliku by wykonać funkcję A następnie po jej wykonaniu powracam na początek funkcją plik.seekg(0) (aby znów wykonać funkcję B) tak się nie dzieje. W czym jest problem ? #include <iostream> #include <fstream> #include <string> using namespace std;
void A( ifstream & wczytaj, ofstream & wypisz ) { cout << "Funkcja A" << endl; int wynik; int poz_serii = 0; int obec_seria = 0; int poprz_wynik; wczytaj >> poprz_wynik; while( !wczytaj.eof() ) { wczytaj >> wynik; if( poprz_wynik < wynik ) obec_seria++; else { if( obec_seria > 3 ) poz_serii++; obec_seria = 0; } poprz_wynik = wynik; } wypisz << "5.1." << endl; wypisz << poz_serii << " pozytywnych serii" << endl; }
void B( ifstream & wczytaj, ofstream & wypisz ) { cout << "Funkcja B" << endl; int wynik; int nr_dnia = 1; int najslabszy_dzien = - 1; int najlepszy_dzien = - 1; wczytaj >> wynik; cout << "wynik: " << wynik << endl; int najdluzszy = wynik; int najkrotszy = wynik; while( !wczytaj.eof() ) { cout << "wynik: " << wynik << endl; if( wynik < najkrotszy ) { najkrotszy = wynik; najslabszy_dzien = nr_dnia; } if( wynik > najdluzszy ) { najkrotszy = wynik; najlepszy_dzien = nr_dnia; } wczytaj >> wynik; nr_dnia++; } wypisz << "5.2." << endl; wypisz << "najdluzszy: " << najdluzszy << " w dniu: " << najlepszy_dzien << endl; wypisz << "najkrotszy: " << najkrotszy << " w dniu: " << najslabszy_dzien << endl; }
void C( ifstream & wczytaj, ofstream & wypisz ) { cout << "Funkcja C" << endl; int wynik; int najdl_seria = 0, obec_seria = 0; int poprz_wynik; int pierw_wynik, poprawil = - 1; wczytaj >> poprz_wynik; while( !wczytaj.eof() ) { wczytaj >> wynik; if( obec_seria == 0 ) pierw_wynik = wynik; if( poprz_wynik < wynik ) obec_seria++; else { if( obec_seria > najdl_seria ) najdl_seria = obec_seria; obec_seria = 0; poprawil = wynik - pierw_wynik; } poprz_wynik = wynik; } wypisz << "5.3." << endl; wypisz << "najdl_seria: " << najdl_seria << " poprawil sie o: " << poprawil << " cm" << endl; }
int main() { ifstream wczytaj( "dziennik.txt" ); ofstream wypisz( "wynik5.txt" ); A( wczytaj, wypisz ); wczytaj.seekg( 0 ); B( wczytaj, wypisz ); wczytaj.seekg( 0 ); C( wczytaj, wypisz ); wczytaj.close(); wypisz.close(); system( "PAUSE" ); } |
|
carlosmay |
» 2016-03-07 22:15:49 A( wczytaj, wypisz ); wczytaj.clear(); wczytaj.seekg( 0 ); B( wczytaj, wypisz ); wczytaj.clear(); wczytaj.seekg( 0 );
Po błędzie odczytu (koniec pliku) strumień ustawia się w stan błędu. |
|
mlOOdy Temat założony przez niniejszego użytkownika |
» 2016-03-07 22:21:54 właśnie przed chwila tez to zauważyłem, dodałem: ale dalej działa niepoprawne :/ A( wczytaj, wypisz ); wczytaj.seekg( 0 ); wczytaj.clear(); B( wczytaj, wypisz ); wczytaj.seekg( 0 ); wczytaj.clear(); C( wczytaj, wypisz ); |
|
carlosmay |
» 2016-03-07 22:23:31 A( wczytaj, wypisz ); wczytaj.clear(); wczytaj.seekg( 0 );
A( wczytaj, wypisz ); wczytaj.seekg( 0 ); wczytaj.clear(); |
|
mlOOdy Temat założony przez niniejszego użytkownika |
» 2016-03-07 22:35:18 ok dzięki, teraz działa :) więc jak ustawię linijkę do czytania z pliku jako pierwszą ( za pomocą wczytaj.seekg( 0 ) ) a następnie wyczyszczę flagi błędu ( za pomocą wczytaj.clear() ) to potraktuje mi to: wczytaj.seekg( 0 ) jako flagę błędu ? |
|
carlosmay |
» 2016-03-07 22:40:26 więc jak ustawię linijkę do czytania z pliku jako pierwszą ( za pomocą wczytaj.seekg( 0 ) ) a następnie wyczyszczę flagi błędu |
Nic się nie dzieje póki nie zresetuje się flag (nie cofa wskaźnika odczytu). Następnie czyści flagę i przy próbie odczytu od razu trafia na koniec pliku (bo tam jest wskaźnik odczytu). |
|
mlOOdy Temat założony przez niniejszego użytkownika |
» 2016-03-07 22:51:59 czyli jak wczytaj.eof () "jest ustawione" na true i dam wczytaj.seekg( 0 ) to nie cofnie wskaźnika odczytu na początek ? |
|
carlosmay |
» 2016-03-07 23:07:03 Samo osiągnięcie końca pliku nie ustawia jeszcze EOF, dopiero próba odczytania gdy wskaźnik jest już na końcu pliku. while( wczytaj >> zmienna ) { } Lepiej użyć takiej konstrukcji. Nieudane wczytanie skutkuje opuszczeniem pętli. Jawnie wiadomo, że nastąpił błąd odczytu. |
|
« 1 » |