carlosmay |
» 2016-04-07 18:56:30 a jakby ktoś jeszcze mógł wyjaśnić jak działa sama funkcja .get() i w odniesieniu do plików. |
Funkcja ta po prostu pobiera po jednym znaku ze strumienia. Z pliku czyta się tak samo jak z klawiatury, tylko strumień innej klasy ( std::ifstream). |
|
jaśkoo Temat założony przez niniejszego użytkownika |
» 2016-04-08 09:27:11 A jeśli chodzi o miejsca w kodzie gdzie deklarowałem zmienne wg Was takie rozwiązanie jest lepsze czy lepiej widziane są wszystkie (o ile to możliwe) zmienne zadeklarowane w jednym miejscu? Jeszcze co do tego co napisał mokrowski o podzieleniu tej funkcji na dwie, lepiej zrobić wywołanie funkcji zliczającej w tej odpowiedzialnej za sprawdzenie poprawności otwarcia pliku czy w mainie? I czy takie wykorzystanie eof jak napisał mateczek: while( true ) { plik >> znak; if( plik.eof() ) break; cout << znak << endl; if( znak == '*' ) licznik++; zabezpiecza przed ewentualnym niepoprawnym działaniem? |
|
carlosmay |
» 2016-04-08 09:43:21 o podzieleniu tej funkcji na dwie |
Pisanie osobnych funkcji wykonujących konkretne zadanie jest dobrą praktyką. Dobrze napisane będą uniwersalne. |
|
jaśkoo Temat założony przez niniejszego użytkownika |
» 2016-04-08 09:52:32 Rozumiem, ale chodziło mi o to gdzie jest lepiej wywołać drugą funkcję, co będzie lepszym nawykiem na przyszłość- czy wywołać ją w pierwszej czy w mainie, np poprzez zmianę typu pierwszej funkcji na bool i od tego co zwróci w mainie uzależnić wywołanie drugiej funkcji. Chociaż szczerze mówiąc już pisząc to mam wrażenie, że druga opcja nie jest chyba najlepszym wyborem, a na pewno bardziej skomplikowanym. |
|
carlosmay |
» 2016-04-08 10:09:14 co będzie lepszym nawykiem na przyszłość- czy wywołać ją w pierwszej czy w mainie, |
Wywołujesz tam gdzie jest potrzeba. Nie ma na to reguły. Tak jak wyżej: dobrze napisana będzie uniwersalna, czy wywołana będzie w main, czy innej funkcji będzie wynikać z organizacji kodu i potrzeb. |
|
mokrowski |
» 2016-04-08 22:52:46 @jaśko, pomyśl o programie jak o .. książce :-) Chcesz aby ktoś ją przeczytał ale tak się składa że wiesz że to "leń" i ma się zapoznać szybko z tematem nie wchodząc w szczegóły :-) O mam porównanie, zadanie nudnej lektury i czytanie bryku :-) Chcesz szybko zrozumieć o co chodzi. Czytasz więc linearnie od góry strony do dołu. Pętle to .. zaburzają (choć nie chcę być źle zrozumiany że nie lubię pętli :-).. bez przesady.. :-) ). Podobnie if'y (to samo.. ify są ok ale ... zaburzają linearność odbioru). Jak to prosty program gdzie wiesz że ma to być: 1. Otwórz plik a jak się nie uda "kończ waść" :-) 2. Zlicz coś w pliku 3. Zamknij plik. ... to tak napisz maina() i tyle. A jak to ma być main gdzie od linii 100 do 400 jest 8 zagnieżdżonych pętli i od 3000-8000 47 warunków to.. chyba jest coś nie ... fajnie :-/ To co napisałeś to prosty kod więc chcę abyś miał na uwadze że to na co zwracam uwagę to "upierdliwość i szczególanctwo" ale na prostym kodzie łatwo pokazać.
U Ciebie funkcja robi następujące rzeczy: 1. Otwiera plik i jak się nie uda, raportuje i kończy program. 2. Liczy coś w pliku. 3. Prezentuje dane na ekran.
Masz co najmniej 3 odpowiedzialności w jednej funkcji czyli 3 powody do zmiany. Jak kod ogarniasz intelektualnie (a wiem że tak...), to nie ma co się pastwić nad kodem ale wiedz że tak jest. A jak wiesz że będzie czytał magister/profesor/początkujący lub projekt ma ADHD bo klient coś zmienia, sami zmieniamy koncepcje to zawsze da się coś zrobić lepiej...
Dobra przepraszam za "smrodek edukacyjny" jakoś tak wyszło.. :) |
|
jaśkoo Temat założony przez niniejszego użytkownika |
» 2016-04-09 08:37:48 I takie pytanie na podsumowanie- czy zmienilibyście coś w tym kodzie? Działa, ale chodzi mi o czytelność i dobre nawyki. #include <iostream> #include <fstream> #include <cstdlib>
using namespace std;
fstream plik;
void zliczanie();
void sprawdzenie() { plik.open( "dokument.txt", ios::in ); if( plik.good() ) { zliczanie(); } else { cout << "Nie odnaleziono pliku!"; exit( 0 ); } }
void zliczanie() { char znak; int licznik = 0; while( plik >> znak ) { if( znak == '*' ) licznik++; } cout << "Ilosc wystapien '*': " << licznik; plik.close(); } int main() { sprawdzenie(); return 0; }
|
|
carlosmay |
» 2016-04-09 11:11:05 Jeśli juz rozdzielane są deklaracje od definicji funkcji, to zrób to dla wszystkich funkcji. Definicje napisz poniżej funkcji main lub podziel program na kilka plików. Wtedy deklaracje tworzą spis treści i łatwiej zorientować się gdzie co jest. Ten przykład jest prosty i trudno się pogubić (poćwicz). Dzielenie kodu na kilka plików |
|
1 « 2 » |