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

Sumowanie liczb z pliku.

Ostatnio zmodyfikowano 2013-03-31 19:16
Autor Wiadomość
matid1234
Temat założony przez niniejszego użytkownika
Sumowanie liczb z pliku.
» 2013-03-30 17:21:59
Witam.
Napisałem program do sumowania liczb, ale za każdym razem wypisuje mi sumę = 0. Wie ktoś gdzie mam błąd?

/*Otworz plik tekstowy, w ktorym beda znajdowaly się tylko liczby calkowite, oddzielone od siebie spacjami.
Nastepnie napisz program, ktory wczyta wszystkie liczby z pliku i wypisze sume wszystkich liczb na standardowym wyjsciu.*/

C/C++
#include <iostream>
#include <cstdlib>
#include <fstream>

using namespace std;

int iSprawdzenie()
{
    ifstream Plik;
    string sNazwaPliku;
    do
    {
        cout << "Podaj nazwe pliku: ";
        cin >> sNazwaPliku;
        Plik.open( sNazwaPliku.c_str() );
        // ^ otwiera plik tekstowy podany przez uzytkownika
    }
    while( !Plik.good() ); //endwhile
   
    string sWiersz;
    cout << "Liczby do sumowania to:" << endl;
    while( getline( Plik, sWiersz ) )
         cout << sWiersz << "\n"; //endwhile
   
    while( true ) //nieskonczona petla do odczytu liczb i znakow
    {
        int iSuma = 0, iLiczba;
        Plik >> iLiczba;
        // ^ wczytuje liczbe z pliku
        if( Plik.good() )
             iSuma += iLiczba;
        else
        {
            cout << "Suma tych liczb wynosi: " << iSuma << endl;
            break; //endif
        }
    } //endwhile
   
    Plik.close();
    // ^ koncze prace na pliku
    return true;
}

int main()
{
    iSprawdzenie();
   
    return 0;
    system( "pause" );
}
P-79623
dambo
» 2013-03-30 17:39:06
wydaje mi się, że dane odczytywane z pliku trzeba najpierw przekonwertować do postaci liczbowych i potem możemy dopiero rozmawiać o ich sumie
P-79626
mactec
» 2013-03-30 17:47:58
Ja bym Ci radził wczytać ten cały plik do jakiegoś bufora a z niego odpowiednio do zmiennych liczbowych. Możesz do tego użyć funkcji atoi: http://www.cplusplus.com/reference/cstdlib/atoi/
P-79627
Fores
» 2013-03-30 17:48:56
Dokladnie, wczytuje nie jako liczby, ale jako znaki. Przekonwertuj na przyklad na inta i bedzie dzialac
P-79628
Monika90
» 2013-03-30 18:07:51
Nie słuchaj ich, oni się nie znają.

Po pierwsze, pętla:
C/C++
while( getline( Plik, sWiersz ) )
     cout << sWiersz << "\n"; //endwhile

odczytuje cały plik, więc nic więcej się już z niego wczytać nie da. Albo usuń tę petlę, albo po niej napisz:
C/C++
Plik.clear();
Plik.seekg( 0 );
co pozwoli odczytać zawartośc pliku jeszcze raz.

Po drugie, zmienna iSuma jest inicjalizowana zerem przy każdym obiegu pętli sumującej, przenieś tę zmienną przed pętlę.

Po trzecie, źle sprawdzasz czy wczytanie liczby się udało, zamiast
if( Plik.good() )
, powinno być
if( !plik.fail() )
, a najlepiej, po prostu:
if( Plik )


Po czwarte, nie używaj notacji węgierskiej. Notacja węgierska spowalnia kompilację.
P-79629
Fores
» 2013-03-30 18:16:52
To nie lepiej while (plik.good()), a getline do petli dac i bedzie lecial linia po linii?
P-79630
mactec
» 2013-03-30 18:37:16
@Monika90
Każda osoba przed tobą powiedziała mu w pewnym sensie dobrą odpowiedz, tylko że oni nie mówili jak to wczytać tylko zsumować. Co prawda można odrazu z ofstream'a wczytać wartości do zmiennej liczbowej ale tamtymi sposobami też by zadziałało.
P-79632
Fores
» 2013-03-30 21:12:02
btw da sie jakos wczytac do zmiennej liczbowej z pliku linijke w takim stylu: "abc 123\n" (nie odwrotnie). Chodzi o to, by uniknac dodawania kolejnej biblioteki, by zrobic glupia konwersje. Obecnei program mi dziala tak, ze wczytuje linie do stringa, z niego robi podciag z liczba po spacji i pozniej dokonuje jej zamiany na inta.
P-79646
« 1 » 2
  Strona 1 z 2 Następna strona