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

Dublowanie znaku przy odczycie z pliku

Ostatnio zmodyfikowano 2016-04-09 11:11
Autor Wiadomość
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).
P-147048
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:
C/C++
while( true ) {
    plik >> znak;
    if( plik.eof() ) break;
   
    cout << znak << endl;
    if( znak == '*' )
         licznik++;
zabezpiecza przed ewentualnym niepoprawnym działaniem?
P-147066
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.

P-147067
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.
P-147068
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.
P-147069
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.. :)
P-147082
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.
C/C++
#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;
}
P-147090
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
P-147091
1 « 2 »
Poprzednia strona Strona 2 z 2