[Trudne zadanie] - Rozdział 34
Ostatnio zmodyfikowano 2019-06-21 18:48
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: #include <iostream> #include <fstream> #include <string> using namespace std;
bool czyNapotkanoZnakNowegoWiersza( std::ifstream & plik ) { char cZnak; for(;; ) { plik.clear(); cZnak = plik.peek(); if( plik.fail() ) return false; if( !isspace( cZnak ) ) return false; plik.get( cZnak ); if( plik.fail() ) return false; if( cZnak == '\n' ) return true; } }
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; }
|
|
mateczek |
» 2019-06-21 17:47:49 sumujesz liczby wierszami z pliku?/ #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; } } |
|
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: #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; } } }
|
|
Burzogrzmot Temat założony przez niniejszego użytkownika |
» 2019-06-21 18:48:55 Dzięki |
|
« 1 » |