Prośba o spr. poprawności komentarzy

0

Witam
Czy mógłby mi ktoś sprawdzić, czy moje komenarze są w miare poprawne.
Niestety nie robiliśmy tego na informatyce w szkole.
Za każda treść merytoryczna jestem wdzięczny :)

/*Napisz program, który przepisujac wejscie na wyjscie -będzie zastępować jednym znakiem odstepu
każdy ciąg złożony z jednego lub kilku takich znaków*/

// Nazwe pliku tekstowergo z, którego chcemy wczytac dane podaje użytkownik

#include <iostream>
#include <fstream>
#include <string> // funkcja c_str()
#include <cstdlib> // funkcja pause

using namespace std;

int main()
{
/*Napisz program, który z wejścia na wyjscie przepisuje ciagi znakow bez powtórzen*/
// Np dla słowa aaabccd wypisze abcd
// Plik z danymi do przetworzenia podaje użytkownik

#include <iostream>
#include <fstream>
#include <string> // funkcja c_str()

using namespace std;

int main()
{
string nazwapliku;
char znakzapamietany; // zapamiętuje znak wcześniejszy
char znak; //znak wczytany z pliku tekstowego

    cout << "Podaj nazwe pliku, z którego chcesz wczytac dane " << endl;
    cin >> nazwapliku;
    ifstream plik(nazwapliku.c_str());
    //Sprawdzam czy poprawnie otworzyłem plik tekstowy
    if(!plik)
    {

        cout<<" Nie udalo mi się otworzyc pliku " << endl;

    }
    else
    {

        plik >> noskipws; // Nie pomijam białych znaków
        plik >> znak;
        plik >> znakzapamietany;

        //Wczytuje dane znak po znaku aż do końca pliku
        while( !plik.eof() )
        {

            // gdy znak wcześniejszy i aktualnie wczytany jest sobie rowne
            if((znakzapamietany == znak))
            {
                // przesuniecie wskaźnika z wczytwanie o kolejny znak
                plik >> noskipws;
                plik >> znak;

            }
            // gdy oba znaki sa rozne
            else
            {

                znakzapamietany = znak;
                cout << znak;
                plik >> noskipws;
                plik >> znak;

            }

        }

    }

return 0;
}
0
LucjanuSz napisał(a)

Czy mógłby mi ktoś sprawdzić, czy moje komenarze są w miare poprawne.


/*Napisz program, który przepisujac wejscie na wyjscie -będzie zastępować jednym znakiem odstepu
każdy ciąg złożony z jednego lub kilku takich znaków*/

// Nazwe pliku tekstowergo z, którego chcemy wczytac dane podaje użytkownik


Są poprawne składniowo, ale używasz dwóch rodzajów komentarza to jednego tekstu.
Zdecyduj się albo na komentarz jednoliniowy:

```cpp
// Napisz program, który przepisujac wejscie na wyjscie -będzie zastępować jednym znakiem odstepu
// każdy ciąg złożony z jednego lub kilku takich znaków
// Nazwe pliku tekstowergo z, którego chcemy wczytac dane podaje użytkownik

lub blokowy:

/* Napisz program, który przepisujac wejscie na wyjscie -będzie zastępować jednym znakiem odstepu
   każdy ciąg złożony z jednego lub kilku takich znaków
   Nazwe pliku tekstowergo z, którego chcemy wczytac dane podaje użytkownik */

Możesz też zaszaleć i przy dłuższych komentarzach użyć "boxed comment":

/***********************************************************************************
 *  Napisz program, który przepisujac wejscie na wyjscie -będzie zastępować jednym znakiem odstepu
 *  każdy ciąg złożony z jednego lub kilku takich znaków
 *  Nazwe pliku tekstowergo z, którego chcemy wczytac dane podaje użytkownik
 ***********************************************************************************/

Niektóre narzędzia do generowania dokumentacji wymagają określonego formatu komentarzy, np:

/***
    Napisz program, który przepisujac wejscie na wyjscie -będzie zastępować jednym znakiem odstepu
    każdy ciąg złożony z jednego lub kilku takich znaków
    Nazwe pliku tekstowergo z, którego chcemy wczytac dane podaje użytkownik
 */

Dobre edytory kodu mają możliwość podświetlania komentarzy innym kolorem (nawet zależnie od typu komentarza), dlatego lepiej trzymać się jednej konwencji przy tekstach wielolinijkowych.

Reszta - patrz komentarze Zjarka.

0

#include <cstdlib> // funkcja pause
Po co? Przecież w <iostream> znajduje się funkcja system(). Wystarczy ją uruchomić z parametrem

system("pause");
0

Co do zdecydowania się na któryś typ to sugerował bym liniowy, coby blokowy móc stosować do chwilowego "wyłączania" całych bloków kodu np celem przetestowania alternatywy (zagnieżdżanie się takowych nie każdy kompilator przepuści, natomiast liniowe wewnątrz blokowego jak najbardziej mogą być)

0

No i w sumie nikt nie napisał najważniejszej rzeczy: większość z tych komentarzy jest niepotrzebna, tylko zaciemnia kod i wprowadza dodatkowy narzut pracy nad ich utrzymaniem. Zmienisz coś w kodzie - wypadałoby zmienić komentarz, żeby nie był mylący, a o tym łatwo zapomnieć.

Kod powinien być kodem samokomentującym się i komentarze wrzucane tylko tam, gdzie rzeczywiście mają sens. Nazwy zmiennych powinny mówić do czego dana zmienna służy, podobnie jak nazwy funkcji itd.

Lepiej by było tak:

int main()
{
string nazwaPliku;
char znakZapamietany;
char aktualnyZnak;

    cout << "Podaj nazwe pliku, z którego chcesz wczytac dane " << endl;
    cin >> nazwapliku;
    ifstream plik(nazwaPliku.c_str());
    if(!plik)
    {

        cout<<" Nie udalo mi się otworzyc pliku " << endl;

    }
    else
    {

        plik >> noskipws; // Nie pomijam białych znaków
        plik >> aktualnyZnak;
        plik >> znakZapamietany;

        while( !plik.eof() )
        {

            if((znakZapamietany == aktualnyZnak))
            {
                // przesuniecie wskaźnika z wczytwanie o kolejny znak
                plik >> noskipws;
                plik >> aktualnyZnak;

            }
            else
            {

                znakZapamietany = aktualnyZnak;
                cout << aktualnyZnak;
                plik >> noskipws;
                plik >> aktualnyZnak;

            }

        }

    }

return 0;
}

Nie zwracałem uwagi na to czy kod poprawnie realizuje zadanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0