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

sprawdzenie kodu

Object Storage Arubacloud
0 głosów
240 wizyt
pytanie zadane 7 kwietnia 2021 w C i C++ przez fsfxvcxv Obywatel (1,160 p.)

Witam, chcialbym spytac czy ten kod jest bardzo zle napisany? Oczywiscie nie namawiam do czytania linijki po linijce ale o takie ogolne spojrzenie na kod.

#include <iostream>
#include <cstdlib>
#include <windows.h>
#include <stdio.h>
#include <conio.h>

using namespace std;

string odpy;
char wybor;


void pierwsze_pytanie()
{
    char odp;
    cout<< "Pierwsze pytanie"<<endl;
    Sleep(1900);
    cout<< "Ile wynosi 8 potega dwojki:"<<endl;
    Sleep(2200);
    cout<< "A.256"<<endl;
    Sleep(500);
    cout<< "B.1024"<<endl;
    Sleep(500);
    cout<< "C.512"<<endl;
    Sleep(500);
    cout<< "D.2048"<<endl;
    odp=getch();
    if(odp=='a'&&'A')
        {
            cout<< "Dobra odpowiedz!"<<endl;
        cout << "Przechodzisz dalej!";
        }

    else
    {
         cout<< "Zla odp, konczysz z wynikiem punktowym (0/3) ";
         Sleep(4000);
         exit(0);
    }

}
void drugie_pytanie()
{
    char odp;
    float dlugosc1,dlugosc2;
    string imie1,imie2;
    cout<<"Podaj 2 imiona:"<<endl;
    cin>>imie1>>imie2;

    dlugosc1=imie1.length();
    dlugosc2=imie2.length();

    cout<< "Drugie pytanie:"<<endl;
    Sleep(1900);
    cout<< "Ile wynosi suma liter tych imion podzielona przez 3"<<endl;
    Sleep(2200);
    cout<< "A.5.7777"<<endl;
    Sleep(500);
    cout<< "B.6.6666"<<endl;
    Sleep(500);
    cout<< "C."<<(dlugosc1+dlugosc2)/3<<endl;
    Sleep(500);
    cout<< "D.3.3333"<<endl;
    odp=getch();
    if(odp=='c'&&'C')
        {
            cout<< "Dobra odpowiedz!"<<endl;
        cout << "Przechodzisz dalej!";
        }

    else
    {
         cout<< "Zla odp, konczysz z wynikiem punktowym (1/3) ";
         Sleep(4000);
         exit(0);
    }

}
void trzecie_pytanie()
{
    char odp;
    cout<< "Trzecie pytanie"<<endl;
    Sleep(1900);
    cout<< "Ile lat ma and¿ei duda"<<endl;
    Sleep(2200);
    cout<< "A.39"<<endl;
    Sleep(500);
    cout<< "B.48"<<endl;
    Sleep(500);
    cout<< "C.45"<<endl;
    Sleep(500);
    cout<< "D.51"<<endl;
    odp=getch();
    if(odp=='b'&&'B')
        {
            cout<< "Dobra odpowiedz!"<<endl;
       cout<< "Udalo ci sie wygrac quiz z punktami (3/3)"<<endl;
        }

    else
    {
         cout<< "Zla odp, konczysz z wynikiem punktowym (2/3) ";
         Sleep(4000);
         exit(0);
    }
}

    void quiz()
    {



        cout<< "Jestes gotowy na quiz? (tak/nie)"<<endl;
    cin>>odpy;

      while(odpy!="tak"&&odpy!="nie")
      {

              cout<< "Chyba jakas zla odpowiedz podales/as"<<endl<<endl;
          cout<< "sproboj ponownie"<<endl;
          Sleep(2500);
          system("cls");
          cin>>odpy;
      }



    if(odpy=="tak")
    {
        cout<< "Tak wiec zaczynamy za:"<<endl;
    }
    else if(odpy=="nie")
      {
          cout<< "No to sie przygotuj"<<endl;
          Sleep(3000);
          exit(0);
      }
Sleep(1000);
for(int i=5;i>=0;i--)
{
    cout<<i<<endl;
    Sleep(700);

}

system("cls");



pierwsze_pytanie();
Sleep(2500);
system("cls");
drugie_pytanie();
Sleep(2500);
system("cls");
trzecie_pytanie();
system("pause");




}

void menu()
    {
    char wybor;
       cout<<"-----Witaj w menu-----"<<endl;
       cout<<"----------------------"<<endl;
        cout<<"1.quiz"<<endl;
        cout<<"2.narazie nic"<<endl;
        cout<<"3.opusc program"<<endl;
        wybor=getch();
    switch(wybor)
    {


    case '1':

        {

            system("cls");
            quiz();
        }
        break;
    case '2':
        {
            system("cls");
        cout<<"tu nic jeszcze nie ma"<<endl;
        cout<<"1.Powrot do menu"<<endl;
        cout<<"2.Koniec programu"<<endl;
        char powrot=getch();
        if(powrot=='1')
        {
            system("cls");
            menu();
        }


        else if(powrot=='2') exit(0);
        else cout<< "cos zle kliknales, zakonczmy program"<<endl;
        Sleep(3000);
        exit(0);


        }
        break;
    case '3': exit(0);
    break;
    default:
    {
        cout<<"wybrales zly numerek"<<endl;
    }

    }
    }


int main()
{

menu();



    return 0;
}

 

3 odpowiedzi

+2 głosów
odpowiedź 7 kwietnia 2021 przez tangarr Mędrzec (154,780 p.)
1. Nie wiadomo po co dołączyłeś nagłówki stdio.h i cstdlib, ponadto jeden z nich dołączyłeś w wersji C a drugi w wersji C++
2. Użycie komendy system jest nieeleganckie
3. Największym błędem jest rekurencyjne wywoływanie funkcji menu. W dłuższej perspektywie doprowadzi to do przepełnienia stosu.
komentarz 7 kwietnia 2021 przez fsfxvcxv Obywatel (1,160 p.)
A dlaczego użycie komendy system jest nieeleganckie ?
komentarz 7 kwietnia 2021 przez fsfxvcxv Obywatel (1,160 p.)
I czy ma Pan jakis sposób na poprawienie błędu w punkcie 3 ?

"Największym błędem jest rekurencyjne wywoływanie funkcji menu. W dłuższej perspektywie doprowadzi to do przepełnienia stosu.,,
komentarz 7 kwietnia 2021 przez Michał Muzyka Pasjonat (24,080 p.)
menu wywoływane w pętli w mainie,
Osobiście nie powiedziałbym, że użycie funkcji system jest nieeleganckie.  Ogólnie chodzi o to, że używa Pan polecenia zarezerwowanego dla systemu windows, ogólnie nie ma jakiejś lepszej alternatywy na to w Pana programie, jednak trzeba uważać na coś takiego, ponieważ, żeby przenieść taki program z systemu windows na linux trzeba trochę pozmieniać.
komentarz 7 kwietnia 2021 przez tangarr Mędrzec (154,780 p.)
Używając komendy system() nie masz żadnej kontroli nad komendą którą wywołujesz. Nie możesz odczytać komunikatów tego programu ani przekazać do niego danych wejściowych. Jedyne co możesz zrobić to sprawdzić wynik działania komendy.

Podczas kompilacji programu na innej platformie systemowej nie dostaniesz żadnego komunikatu o błędzie. Dopiero podczas działania na twojej konsoli zaczną się pojawiać komunikaty o błędach z powłoki systemowej.

Dlatego napisałem, że jest to mało eleganckie.
+1 głos
odpowiedź 7 kwietnia 2021 przez Wiciorny Ekspert (269,710 p.)
biorąc pod uwagę informatykę: jest źle napisany, gdyż jest pisany w języku polskim.
0 głosów
odpowiedź 7 kwietnia 2021 przez Mavimix Dyskutant (8,390 p.)

Osobiście poprawił bym te wcięcia i entery  (żeby wszystko równo było, funkcja pod funkcją blok pod blokiem itp, mniej więcej na ten styl:

int funckja()
{
    for (;;)
    {
        cout << "Hello World" << endl;
    }
}

int main(void)
{
    int a = 0;
    a++;

    funckja();
}

 

Poczytaj (pierwszy lepszy link, nie wiem czy to dokłądnie to ale wygguglaj "czytelność kodu" czy coś w tym stylu)

http://drzewniak.slupsk.pl/~ks/c/c_004.html

Podobne pytania

0 głosów
0 odpowiedzi 452 wizyt
pytanie zadane 15 marca 2022 w C i C++ przez XDBX Użytkownik (640 p.)
–1 głos
2 odpowiedzi 593 wizyt
pytanie zadane 23 sierpnia 2019 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 363 wizyt

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...