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

Lekcja 34 - zadanie 2.

Ostatnio zmodyfikowano 2014-06-27 19:20
Autor Wiadomość
pekfos
» 2014-06-27 17:59:44
Teraz to dopiero się cuda dzieją.
sumy nie zerujesz na początku..

A to jest dobrze?
Nie, ale lepiej niż było. Musisz jeszcze wyzerować sumę.
P-112854
Mateus.
Temat założony przez niniejszego użytkownika
» 2014-06-27 19:03:44
C/C++
while( !plik.eof() )
{
    suma = 0;
    plik >> a;
    suma += a;
    if( plik.fail() )
    {
        suma = 0;
        cout << "Napotkano blad w wierszu nr. " << i << endl;
        plik.clear();
        getline( plik, wiersz );
        i++;
    }
    if( czy( plik ) )
    {
        i++;
        cout << suma << endl;
    }
}

3
Napotkano blad w wierszu nr. 2
2
3
Napotkano blad w wierszu nr. 5
Trochę poprawiłem jeszcze inkrementację i dodałem zerowanie sumy, ale dalej jest problem z sumowaniem, który (zweryfikujcie to) moim zdaniem spowodowany jest tym, że
suma += a
 "sumuje" tylko pierwszą wczytaną liczbę, a nie wszystkie. Wydaje mi się, że rozwiązaniem jest pętla do liczenia sumy, ale nie wiem jak ją napisać poprawnie. Drugie, co mi przyszło do głowy, to żeby zrobić coś takiego
plik >> a >> b >> c >> d >> e
, ale to nada się tylko do jednej z linijek, a w innych uruchomi
if( plik.fail() ) { }
.
P-112856
pekfos
» 2014-06-27 19:07:14
A moim zdaniem źle sumuje, bo dalej zerujesz sumę w pętli, poza warunkiem. Przenieś tę linię do drugiego warunku.
P-112857
Mateus.
Temat założony przez niniejszego użytkownika
» 2014-06-27 19:20:29
Próbowałem tego, ale suma z pierwszego wiersza wychodziła z kosmosu, więc uznałem to za błędne.
Aaa... teraz podczas pisania tego zauważyłem, że nie nadałem początkowej wartości
int suma = 0;
 i dlatego był ten dziwny wynik :/ Gdybym to tylko wcześniej zauważył byłoby dużo mniej pisania i pewnie sam doszedłbym do rozwiązania bez tak dużej pomocy.
Cały kod:
C/C++
#include <string>
#include <fstream>
#include <iostream>
using namespace std;
bool czy( ifstream & plik )
{
    char cZnak;
    for(;; )
    {
        plik.clear();
        cZnak = plik.peek();
        if( plik.fail() || plik.bad() )
             return false;
       
        if( !isspace( cZnak ) )
             return false;
       
        plik.get( cZnak );
        if( plik.fail() || plik.bad() )
             return false;
       
        if( cZnak == '\n' )
             return true;
       
    }
}
void funkcja( string sciezka )
{
    ifstream plik;
    string wiersz;
    plik.open( sciezka.c_str() );
    int a;
    int i = 1;
    int suma = 0;
    while( !plik.eof() )
    {
        plik >> a;
        suma += a;
        if( plik.fail() )
        {
            suma = 0;
            cout << "Napotkano blad w wierszu nr. " << i << endl;
            plik.clear();
            getline( plik, wiersz );
            i++;
        }
        if( czy( plik ) )
        {
            i++;
            cout << suma << endl;
            suma = 0;
        }
    }
    plik.close();
}
int main()
{
    funkcja( "C://Users//Mateusz//Documents//plik.txt" );
    return 0;
}

6
Napotkano blad w wierszu nr. 2
5
13
Napotkano blad w wierszu nr. 5

Wielkie dzięki pekfos za pomoc i wyrozumiałość :D
P-112858
1 2 « 3 »
Poprzednia strona Strona 3 z 3