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

Wczytywanie danych z pliku za pomoca >> - problem z zadaniem

Ostatnio zmodyfikowano 2013-12-02 15:13
Autor Wiadomość
Zacco
Temat założony przez niniejszego użytkownika
Wczytywanie danych z pliku za pomoca >> - problem z zadaniem
» 2013-12-01 22:33:16
Witam, próbuję napisać program który ma wczytać dane z pliku i następnie je zsumować i wypisać. Napisałem coś takiego :
C/C++
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

void dodaj( int liczba )
{
    int wynik = 0;
    wynik += liczba;
    cout << wynik;
}

bool WczytajPlik( string nazwapliku )
{
    ifstream plik;
    plik.open( nazwapliku.c_str() );
    if( plik.good() )
    { while( true )
        {
            int liczba;
            plik >> liczba;
            if( plik.good() )
                 dodaj( liczba );
            else
                 break;
           
        }
    }
    else
         return false;
   
}

int main()
{
    if( !WczytajPlik( "D://haha.txt" ) )
         cout << "Nie udalo sie wczytac pliku" << endl;
   
    return 0;
}

Po skompilowaniu wychodzi takie coś:
"112233Nie udalo sie wczytac pliku"

Mój plik ma nazwę haha.txt a w nim znajduja sie liczby 1 1 2 2 3 3
Dlaczego program nie sumuje tych liczb i wyswietla ze nie udalo sie wczytac pliku skoro sie udalo? Nie moge do tego dojść. Byłbym wdzięczny za pomoc.

Pozdrawiam
P-98069
Nitr0Skay
» 2013-12-01 23:02:36
Już wiem, na czym polega problem. Pętla wywołuje funkcję dodaj(), w której Tworzysz nową zmienną suma a zaraz po niej ja wypisujesz. Za każdym kolejnym obrotem pętli wartość sumy jest resetowana, tzn funkcja tworzy nową zmienną, do której przypisuje podany jej argument. Dlatego wszystkie liczby zostają przepisane, a nie następuje ich sumowanie.
P-98071
Mitu
» 2013-12-01 23:59:30
Za każdym razem program wyświetla, że nie wczytano pliku, bo nie masz w funkcji "return true". Powinno się znaleźć w ifie za pętlą.

Liczby się nie sumują, bo nie ma takiej możliwości - za każdym razem gdy wywołujesz funkcję, tworzysz w niej zmienną int równą zero i do niej dodajesz wartość, więc funkcja zawsze wyświetli 0+liczba, tak jak to wygląda teraz.

Możesz to naprawić w prosty sposób dodając modyfikator static przed typem zmiennej w funkcji, tutaj więcej na ten temat: [LINK];



P-98074
Zacco
Temat założony przez niniejszego użytkownika
» 2013-12-02 14:12:07
Ok ogarnąłem ten napis ale dodawania nie mogę. Jeśli dam tak :
C/C++
void dodaj( int liczba )
{
    int wynik;
    wynik += liczba;
    cout << wynik;
}
To daje mi efekt końcowy : 224466. Mitu nie wiem jak to ogarnąć przez te statystyczne. Pomoże ktoś? :)
P-98079
pekfos
» 2013-12-02 14:50:49
Po co to robisz w funkcji?
P-98082
Zacco
Temat założony przez niniejszego użytkownika
» 2013-12-02 15:03:28
Ponieważ chcę się nauczyć korzystać z funkcji bo jak mi to wejdzie w banie to bede tego uzywal a jak nie to bede pisal programy bez funkcji.
P-98083
pekfos
» 2013-12-02 15:13:40
W tym przypadku nie ma żadnego sensu używania funkcji. Sumować możesz na miejscu - będzie prościej i szybciej.
P-98088
« 1 »
  Strona 1 z 1