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-26 19:48:08
Dlaczego nie poprawiłeś konkretnych błędów, które podałem? W ten sposób możemy ciągnąć ten temat bez żadnych efektów, bo zamiast poprawiać błędy, robisz program od nowa wprowadzając nowe błędy.
P-112797
Mateus.
Temat założony przez niniejszego użytkownika
» 2014-06-27 12:41:43
Spróbowałem zastosować się do twoich rad, ale nie wiem do czego teraz użyć funkcji
bool czy( plik )
.
Kod:
C/C++
#include <string>
#include <fstream>
#include <iostream>
using namespace std;
bool czy( ifstream & plik )
{
    char cZnak;
    for(;; ) //nieskończona pętla
    {
        plik.clear();
        cZnak = plik.peek(); //sprawdzamy jaki kolejny znak zostanie zwrócony przez operację odczytu
        if( plik.fail() || plik.bad() )
             return false; //wystąpił błąd odczytu danych
       
        if( !isspace( cZnak ) )
             return false; //pobrany znak nie jest białym znakiem
       
        plik.get( cZnak ); //odczytujemy biały znak z pliku
        if( plik.fail() || plik.bad() )
             return false; //wystąpił błąd odczytu danych
       
        if( cZnak == '\n' )
             return true;
       
    }
}
void funkcja( string sciezka )
{
    ifstream plik;
    plik.open( sciezka.c_str() );
    int a;
    int i = 1;
    int suma;
    while( !plik.eof() )
    {
        plik >> a;
        if( plik.fail() )
        {
            i++;
            cout << "Napotkano blad w wierszu nr. " << i << endl;
            plik.clear();
            char b;
            plik >> b;
        }
        else
        {
            i++;
            suma += a;
        }
        cout << suma << endl;
        suma = 0;
    }
    plik.close();
}
int main()
{
    funkcja( "C://Users//Mateusz//Documents//plik.txt" );
    return 0;
}
4499404
2
3
3
4
Napotkano blad w wierszu nr. 7
0
5
3
2
5
2
2
1
3
Napotkano blad w wierszu nr. 16
0
3
4

Naprawdę chciałbym, abyście wskazali mi co robię źle w tym kodzie, który pisałem od początku, ponieważ jedyne zastosowanie funkcji
czy( plik )
, które przychodzi mi do głowy to to, które przedstawiłem w tym drugim kodzie, a z tym nie bardzo wiem co mam zrobić :(
P-112838
pekfos
» 2014-06-27 14:21:30
Zamiast else ma być if(czy(plik)).

C/C++
char b;
plik >> b;
Nie masz pominąć jednego znaku, lecz całą linię.

C/C++
while( !plik.eof() )
{
    plik >> a;
    //..
    cout << suma << endl;
    suma = 0;
}
A tu aż szkoda gadać..
P-112839
Mateus.
Temat założony przez niniejszego użytkownika
» 2014-06-27 14:56:47
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;
    while( !plik.eof() )
    {
        plik >> a;
        if( plik.fail() )
        {
            cout << "Napotkano blad w wierszu nr. " << i << endl;
            plik.clear();
            getline( plik, wiersz );
        }
        if( czy( plik ) )
        {
            suma += a;
            i++;
            cout << suma << endl;
        }
        suma = 0;
    }
    plik.close();
}
int main()
{
    funkcja( "C://Users//Mateusz//Documents//plik.txt" );
    return 0;
}

3
Napotkano blad w wierszu nr. 2
2
3
Napotkano blad w wierszu nr. 4

I znowu (z powodu mojej niewiedzy) nie działa :( Ehh... ciężkie jest życie uczącego się programowania.
P-112840
pekfos
» 2014-06-27 15:19:27
Sumuj w samej pętli, a nie w ifie.
P-112842
Mateus.
Temat założony przez niniejszego użytkownika
» 2014-06-27 16:47:41
Próbowałem sumować chyba we wszystkich miejscach pętli (również poza
if
, ale efekt działania programu dalej jest taki sam :(
P-112850
pekfos
» 2014-06-27 17:07:55
Sumuj poza warunkiem, zeruj sumę w warunku.
P-112851
Mateus.
Temat założony przez niniejszego użytkownika
» 2014-06-27 17:16:48
Teraz to dopiero się cuda dzieją. Może coś jeszcze robię źle 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;
    while( !plik.eof() )
    {
        plik >> a;
        suma += a;
        if( plik.fail() )
        {
            cout << "Napotkano blad w wierszu nr. " << i << endl;
            plik.clear();
            getline( plik, wiersz );
        }
        if( czy( plik ) )
        {
            i++;
            cout << suma << endl;
            suma = 0;
        }
    }
    plik.close();
}
int main()
{
    funkcja( "C://Users//Mateusz//Documents//plik.txt" );
    return 0;
}

4499521
Napotkano blad w wierszu nr. 2
16
13
Napotkano blad w wierszu nr. 4
A to jest dobrze?
C/C++
//...
if( plik.fail() )
{
    cout << "Napotkano blad w wierszu nr. " << i << endl;
    plik.clear();
    getline( plik, wiersz );
}
//...
P-112852
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona