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

[Trudne zadanie] - Rozdział 34

Ostatnio zmodyfikowano 2019-06-21 18:48
Autor Wiadomość
Burzogrzmot
Temat założony przez niniejszego użytkownika
[Trudne zadanie] - Rozdział 34
» 2019-06-21 16:15:26
Udało mi się je samodzielnie wykonać, jednak patrząc na jego karkołomny kod chciałbym poznać kod napisany już przez doświadczonego programistę (szukając nie znalazłem takiego wątku) aby je porównać. Z góry dziękuje za pomoc :)


Mój program:

C/C++
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

bool czyNapotkanoZnakNowegoWiersza( std::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() )
             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() )
             return false; //wystąpił błąd odczytu danych
       
        if( cZnak == '\n' )
             return true;
       
    } //for
}

bool wczytaj( string nazwaPliku )
{
    std::ifstream plik;
    plik.open( nazwaPliku.c_str() );
    if( !plik.good() )
         return false;
   
    int suma = 0, x, wiersz = 1;
    char y;
   
    while( true ) {
        if( czyNapotkanoZnakNowegoWiersza( plik ) )
        { cout << suma << endl;
            suma = 0;
            wiersz++;
            continue; }
       
        plik >> x;
        if( !plik.fail() )
        { suma += x; }
        else
        { plik.clear();
            plik >> y;
            if( !plik.fail() )
            { cout << "Bledne dane w wierszu nr: " << wiersz << endl;
                suma = 0;
                while( !czyNapotkanoZnakNowegoWiersza( plik ) )
                { czyNapotkanoZnakNowegoWiersza( plik );
                    plik >> y;
                    if( !plik.fail() )
                    continue; }
                wiersz++; }
        }
       
        if( plik.eof() )
             break;
       
    }
   
    return true;
}

int main()
{
    if( !wczytaj( "Liczby.txt" ) )
         cout << "Nie udalo sie";
   
    return 0;
}
P-174823
mateczek
» 2019-06-21 17:47:49
sumujesz liczby wierszami z pliku?/
C/C++
#include <iostream>
#include<fstream>
#include<sstream>
using namespace std;

int main() {
    string liniaTekst;
    ifstream plik( "dane.txt" );
    while( getline( plik, liniaTekst ) ) {
        stringstream strumien( liniaTekst );
        int liczba, suma = 0;
        while( strumien >> liczba ) {
            suma += liczba;
        }
        cout << suma << endl;
    }
}
P-174824
pekfos
» 2019-06-21 17:51:33
Ten kod nie spełnia wymagań postawionych w zadaniu, ani nie realizuje tej samej funkcjonalności.

jednak patrząc na jego karkołomny kod chciałbym poznać kod napisany już przez doświadczonego programistę
Kod napisany przez doświadczonego programistę będzie ładnie sformatowany. To nawet nie wymaga żadnej wiedzy. Co do właściwego doświadczenia, kod mógłby wyglądać na przykład tak:
C/C++
#include <iostream>
#include <fstream>
#include <limits>

bool czyNapotkanoZnakNowegoWiersza( std::ifstream & plik );

int main()
{
    std::ifstream plik( "test.txt" );
    int suma = 0, liczba, wiersz = 1;
   
    for(;; )
    {
        if( czyNapotkanoZnakNowegoWiersza( plik ) )
        {
            std::cout << suma << '\n';
            suma = 0;
            ++wiersz;
        }
       
        if( plik >> liczba )
             suma += liczba;
        else
        {
            if( plik.eof() )
                 break;
           
            plik.clear();
            plik.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
            std::cout << "Bledne dane w wierszu nr " << wiersz << "!\n";
            suma = 0;
            ++wiersz;
        }
    }
}
P-174825
Burzogrzmot
Temat założony przez niniejszego użytkownika
» 2019-06-21 18:48:55
Dzięki
P-174826
« 1 »
  Strona 1 z 1