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

Wczytywanie z pliku

Ostatnio zmodyfikowano 2014-06-16 21:04
Autor Wiadomość
fogielek1234
Temat założony przez niniejszego użytkownika
Wczytywanie z pliku
» 2014-06-16 18:52:25
Witam. Mam dziwny i niezrozumiały dla mnie problem. Mam do wykonania dwie proste funkcje. Pierwsza ma wczytywać z pliku liczby i podawać ich średnią. Druga ma przepisać z jednego pliku do drugiego wartości nieujemne. Cały algorytm prosty i zrobiony. Rzecz w tym , że program nadpisuje mi do plików jakieś dziwne wartości. Tak jakby jedną wartość wpisywał losowo. Siedzę nad tym już długo i nie wiem co jest z tym nie tak. Proszę o pomoc.
funkcja średnia
C/C++
void srednia( char nazwa_pliku[] )
{
    int i = 0;
    double tab[ 1000 ], suma = 0;
    fstream plik;
    plik.open( nazwa_pliku, ios::in );
    if( !plik.good() )
    {
        cout << "Blad odczytu" << endl;
        exit( 0 );
    }
    while( !plik.eof() )
    {
        plik >> tab[ i ];
        suma += tab[ i ];
        i++;
    }
    cout << "Srednia z liczby w pliku " << nazwa_pliku << " wynosi: " << suma / i << endl;
    plik.close();
}
ta funkcja dla takich danych
-10
-9
8
7
6
5
4
3
2
1
wyświetla -8.41451e+060
sprawdziłem jakie wartości są w tablicy i na końcu jest dopisana wartość -9.25596e+061
Dlatego taka dziwna średnia wychodzi. Przypuszczam , że gdzieś przy indeksowaniu tablicy popełniam błąd i w pętli wpisuje mi wartość dla jednego indeksu za dużo. W drugiej funkcji robi to samo dlatego wychodzą głupoty. Oświeci mnie ktoś dlaczego tak się dzieje?
Pozdrawiam i z góry dziękuje. [/i]
P-112164
Jacob99
» 2014-06-16 19:06:55
Jak już chyba z tysiąc razy było na tym forum mówione ten zapis:
while( !plik.eof() )
 to zło :). Zamiast tego zastosuj taki zapis
C/C++
while( plik >> tab )
{
    suma += tab;
    i++;
}
Zamiast przekazywać tablicę znaków użyj lepiej stringa lub chociaż wskaźnika na literał
C/C++
funkcja( char * tab ) //...
Ponadto nigdzie nie inicjalizujesz tablicy tab, co oznacza, że na elementy, których nie zainicjowałeś też wchodzą do obliczeń.

P.S. Ujmuj zawsze kod w znaczniki [cpp] [/cpp].
P-112165
michal11
» 2014-06-16 21:04:49
To nie jest zło tylko trzeba umieć z tego korzystać. Zresztą w swoim kodzie zapomniałeś o indeksie w tablicy.
P-112175
« 1 »
  Strona 1 z 1