• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Mój program - "Rejstracja i logowanie z pliku"

VPS Starter Arubacloud
0 głosów
302 wizyt
pytanie zadane 31 maja 2016 w C i C++ przez xjakubekx Obywatel (1,280 p.)
edycja 31 maja 2016 przez xjakubekx

Witam,
Prosiłbym was o ocenę mojego kodu, uczę się juz łącznie 2 tygodnie C++ laugh, co sądzicie o moich postępach?
Kod tworzyłem chyba z 3 wieczory, zrobiłem go głównie dzięki waszej pomocy a raczej użytkownika "Patrycjerz", bo przez niedoświadczenie nie wiedziałem jak zapisać niektóre funkcje.

Co poprawić? Co zabezpieczyc? Co zmienic? Czy da się lepiej to zapisać? Czy nie ma błędów?

http://wklej.org/id/2484218/ - KOD

3 odpowiedzi

+1 głos
odpowiedź 31 maja 2016 przez adrian17 Ekspert (344,100 p.)
wybrane 3 czerwca 2016 przez xjakubekx
 
Najlepsza

Po pierwsze... ROM? "read-only-memory"? Z tego co widzę, to zwykły plik.

  • Zmienne globalne mimo, że jest tylko jedna funkcja
  • w C++ unikaj exit()
  • unikaj goto
  • linia 73: za dużo w jednej linii
  • lekko zepsute wcięcia
  • na linii 83 iterujesz po wszystkich loginach, nawet, jeśli znajdziesz login na samym początku

A z konkretnych przykładów, można na przykład:

        while (getline(plik,linia)) //pozyskiwanie zmiennych z linijek tekstu
        {
            switch(nr_linii)
                {
                    case 1: uzytkownicy[nr_konta].login=linia;  break;
                    case 2: uzytkownicy[nr_konta].haslo=linia; nr_konta++; break;
                }
            nr_linii++;

            if (nr_linii==3) nr_linii=1;
        }

Zamienić na znacznie mniej skomplikowany:

        while (true)
        {
            if (!getline(plik,login))
                break;
            if (!getline(plik,haslo))
                break;

            uzytkownicy[nr_konta].login = login;
            uzytkownicy[nr_konta].haslo = haslo;

            nr_konta++;
        }

 

komentarz 31 maja 2016 przez xjakubekx Obywatel (1,280 p.)

Co zamiast ?

  • exit()
  • goto
1
komentarz 31 maja 2016 przez adrian17 Ekspert (344,100 p.)
exit() -> return w main

goto -> nic / wszystkie inne formy do kontroli przepływu kodu
komentarz 31 maja 2016 przez xjakubekx Obywatel (1,280 p.)
Jak wpisałem do kodu Pana mniej skomplikowaną wersję to przy logowaniu nie wykrywa nawet loginu
1
komentarz 31 maja 2016 przez adrian17 Ekspert (344,100 p.)
Owszem, bo kod pokazałem w odosobnieniu, a przed jego zintegrowaniem do programu trzeba się zastanowić - przez to że wszystko masz globalne, łatwo o przypadkowe bugi. Czemu? Bo użyłem zmienną o nazwie login, do której wcześniej wczytałeś login od usera.
komentarz 31 maja 2016 przez xjakubekx Obywatel (1,280 p.)

Dobra, czyli starac sie deklarowac zmienne w main()?
Jeszcze popracuje nad kodem zeby zasymilowac zmienne w proponowanym uproszczeniu kodu angry

1
komentarz 31 maja 2016 przez adrian17 Ekspert (344,100 p.)
Zmienne ogólnie powinny być deklarowane jak najbliżej obszaru ich użycia, tak.
komentarz 31 maja 2016 przez xjakubekx Obywatel (1,280 p.)
zapamietam na przyszlosc !
+1 głos
odpowiedź 31 maja 2016 przez Radfler VIP (101,030 p.)

Moje uwagi:

  • Nie korzystasz z nagłówka conio.h. Usuń go.
  • Zmień nagłówek z stdlib.h na cstdlib. W końcu piszemy w C++, a nie w C.
  • Jeżeli wewnątrz instrukcji switch tworzysz zmienne, to ujmij case, w którym je tworzysz, w klamry.
  • Nazwy klas/struktur powinny, ale nie muszą, zaczynać się wielką literą.
  • Zamiast pisania tylu komentarzy możesz podzielić kod na funkcje o odpowiednich nazwach.
komentarz 31 maja 2016 przez xjakubekx Obywatel (1,280 p.)
  • Czyli mam całego case wziąć w klamry?
  • Jeszcze nie doszedłem do funkcji, a komentarze napisałem dla was wink
komentarz 31 maja 2016 przez Radfler VIP (101,030 p.)

Jak masz np. tego case:

case 2:
    cout<< "Aby sie zalogowac na serwer wpisz login: ";
    cin >> login;
    //przypisywanie zmiennym danych do struktury kont uzytkownicy[x] loginow i hasel
    plik.open("Dane logowania.txt", ios::in);
    if(plik.good()==false) //sprawdzanie czy plik istnieje
    {
        cout << "Plik z danymi nie istnieje!";
        exit(0);
    }
    string linia; int nr_linii=1; //zmienne do petli
    while (getline(plik,linia)) //pozyskiwanie zmiennych z linijek tekstu
    {
        switch(nr_linii)
            {
                case 1: uzytkownicy[nr_konta].login=linia;  break;
                case 2: uzytkownicy[nr_konta].haslo=linia; nr_konta++; break;
            }
        nr_linii++;
        if (nr_linii==3) nr_linii=1;
    }
    plik.close();
    ....

To lepiej będzie, jak umieścisz go w klamrach:

case 2: {
    cout<< "Aby sie zalogowac na serwer wpisz login: ";
    cin >> login;
    //przypisywanie zmiennym danych do struktury kont uzytkownicy[x] loginow i hasel
    plik.open("Dane logowania.txt", ios::in);
    if(plik.good()==false) //sprawdzanie czy plik istnieje
    {
        cout << "Plik z danymi nie istnieje!";
        exit(0);
    }
    string linia; int nr_linii=1; //zmienne do petli
    while (getline(plik,linia)) //pozyskiwanie zmiennych z linijek tekstu
    {
        switch(nr_linii)
            {
                case 1: uzytkownicy[nr_konta].login=linia;  break;
                case 2: uzytkownicy[nr_konta].haslo=linia; nr_konta++; break;
            }
        nr_linii++;
        if (nr_linii==3) nr_linii=1;
    }
    plik.close();
    ....
}

Komentarze są w wielu miejscach nie potrzebne, większość rzeczy można zrozumieć z kontekstu ;)

komentarz 31 maja 2016 przez xjakubekx Obywatel (1,280 p.)

A tam, amatorskie błędy cheeky

zastanawiałem się czy jak nie dam nawiasów to czy program nie wybuchnie ale stwierdzilem ze po co jak jest break xD

komentarz 31 maja 2016 przez xjakubekx Obywatel (1,280 p.)
break stawiac w klamrach czy poza?
1
komentarz 31 maja 2016 przez Radfler VIP (101,030 p.)
Nawiasy są tu przede wszystkim dla bezpieczeństwa. Mógłbyś odwołać się do zmiennych z case 2 z innego case, którego możesz stworzyć w przyszłości. I wtedy program wybuchnie ;) Jeżeli chodzi o break to możesz go wstawić gdzie chcesz (osobiście wolę za klamrą).
+1 głos
odpowiedź 31 maja 2016 przez MrMock Bywalec (2,890 p.)

http://forum.pasja-informatyki.pl/14873/witam-prosze-o-opisanie-podsumowanie-mojej-pracy-d

oj jakoś dłuży mi sie ten czas jeśli kwiecień 2015 był 2 tyg temu ale ok a co do programu możesz przykładowo zrobić szyfrowanie pliku bo sam txt dużo bezpieczeństwa nie daje 

komentarz 31 maja 2016 przez xjakubekx Obywatel (1,280 p.)
Aaaa masz mnie, lecz nie sklamałem, kiedys sie uczylem pare dni, po czym przestałem i teraz znowu powróciłem :D więc łącznie 2tygodnie może nie licząc przerwy.

jak zrobić takie zabezpieczenie, coś p.Mirosław Zelent mówił ze jeszcze chyba wspomni o plikach binarnych wiec jeszcze tego nie będę ruszał
komentarz 31 maja 2016 przez LordOfTheStrings Obywatel (1,610 p.)
komentarz 1 czerwca 2016 przez xjakubekx Obywatel (1,280 p.)

Ohhh, nie każ mi czytać całej wikipedi frown

czyli zmienic ścieżkę zapisu? :P

komentarz 1 czerwca 2016 przez xjakubekx Obywatel (1,280 p.)
Dobra jutro poczytam bo widze ze to nie takie proste ;P

Podobne pytania

0 głosów
2 odpowiedzi 639 wizyt
pytanie zadane 17 marca 2018 w PHP przez Matim4 Nowicjusz (150 p.)
0 głosów
1 odpowiedź 418 wizyt
pytanie zadane 6 września 2017 w PHP przez Forester Użytkownik (560 p.)
+1 głos
1 odpowiedź 161 wizyt
pytanie zadane 6 lutego 2017 w PHP przez nielotweb Bywalec (2,240 p.)

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...