Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

brak powrotu na początek pliku

Ostatnio zmodyfikowano 2016-03-07 23:07
Autor Wiadomość
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 ?

C/C++
#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; // -1 oznacza zły wynik
    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;
        }
        //cout << "najkrotszy: " << najkrotszy << endl;
        if( wynik > najdluzszy ) {
            najkrotszy = wynik;
            najlepszy_dzien = nr_dnia;
        }
        //cout << "najdluzszy: " << najdluzszy << endl;
       
        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" );
}
P-145692
carlosmay
» 2016-03-07 22:15:49
C/C++
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.
P-145693
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 :/

 
C/C++
A( wczytaj, wypisz ); wczytaj.seekg( 0 ); wczytaj.clear();
B( wczytaj, wypisz ); wczytaj.seekg( 0 ); wczytaj.clear();
C( wczytaj, wypisz );
P-145694
carlosmay
» 2016-03-07 22:23:31
C/C++
A( wczytaj, wypisz ); wczytaj.clear(); wczytaj.seekg( 0 );
// znajdz roznice
A( wczytaj, wypisz ); wczytaj.seekg( 0 ); wczytaj.clear();
P-145695
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 ?
P-145696
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).
P-145697
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 ?
P-145698
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.

C/C++
while( wczytaj >> zmienna )
{ }
Lepiej użyć takiej konstrukcji.
Nieudane wczytanie skutkuje opuszczeniem pętli. Jawnie wiadomo, że nastąpił błąd odczytu.
P-145700
« 1 »
  Strona 1 z 1