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

Nieczytelny kod menu

Object Storage Arubacloud
0 głosów
222 wizyt
pytanie zadane 17 października 2017 w C i C++ przez Shiro Stary wyjadacz (10,300 p.)

Hej, 

Robię pewien program, która jak na razie ma cztero-poziomowe menu, problem w tym że łatwo się w nim gubię ogólnie zmiana czegokolwiek w nim to udręka. Czy można poniższy kod jakoś po prawić aby dało się go w ogóle czytać ? Dodam że zastosowałem funkcję która wyświetla menu i pobiera wybór usera, który później zwraca w formie chara.


while (choose != '0')
{
    choose = menu(0);
    if (choose == '2')
    {
        while (choose != '0')
        {
            choose = menu(2);
            if (choose == '2')
            {
                while (choose != '0')
                {
                    choose = menu(22);
                    if (choose == '2')
                    {
                        //... change date .. 
                    }///if 2 > 2 > 2
                }choose = NULL;
            }///if 2 > 2
        }choose = NULL;
    }///if 2
}choose = NULL;

Z góry dziękuje za pomoc i pozdrawiam ;) 

2 odpowiedzi

0 głosów
odpowiedź 17 października 2017 przez bielak1992r Użytkownik (660 p.)
Pierwsza myśl. Jak menu to zamiast if dałbym switch i case. Ale jestem początkujący dopiero ;)

http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Warunek-wielokrotnego-wyboru-switch-case/17
komentarz 17 października 2017 przez Shiro Stary wyjadacz (10,300 p.)
Niby masz rację jednak gdy zrobiłem to ze swichem było jeszcze gorzej. Swich ma dwie klamry więcej i jeszcze breaka. No ale zobaczę jeszcze ;)
komentarz 17 października 2017 przez bielak1992r Użytkownik (660 p.)
Jak nie blokują Cię jakieś umowy czy coś podobnego to możesz wrzucić cały kodzik, chętnie zobaczę co tam jest i sprawdzę czy początkujący zawodnik zobaczy możliwość usprawnienia czytelności :P

EDIT: Oczywiście wystarczy fragment opisujący menu, pewnie to element czegoś większego. Ale jak wydzielenie zajmie za dużo czasu to nie trać go ;)
komentarz 18 października 2017 przez Shiro Stary wyjadacz (10,300 p.)
int main()
{
	Loading();

	while (choose != '0')
	{
		choose = menu(0);
		if (choose == '2')
		{
			while (choose != '0')
			{
				choose = menu(2);
				if (choose == '2')
				{
					while (choose != '0')
					{
						choose = menu(22);
						if (choose == '2')
						{
							//... change date .. 
						}///if 2 > 2 > 2
					}choose = NULL;
				}///if 2 > 2
			}choose = NULL;
		}///if 2
	}choose = NULL;

	return 0;
}

char menu(int level)
{
	if(level == 0)
	{
		system("cls");
		cout << "---------------------" << endl;
		cout << "Work counter!" << endl;
		cout << "---------------------" << endl;
		cout << "1. Add new log day (full)" << endl;
		cout << "2. Add new log day (time work)" << endl;
		cout << "3. Add new log day (norma)" << endl;
		cout << "4. Add new log day (norma from otto)" << endl;
		cout << "5. Show raport" << endl;
		cout << "0. Exit" << endl;
		cout << "Choose: ";
		return _getch();
	}
	if (level == 2)
	{
		system("cls");
		cout << "---------------------" << endl;
		cout << "Work counter!" << endl;
		cout << "---------------------" << endl;
		cout << "Data: " << timeWork[0] << endl;
		cout << "Section: " << timeWork[1] << endl;
		cout << "Time: " << timeWork[2] << endl;
		cout << "Time breaks: " << timeWork[3] << endl;
		cout << "---------------------" << endl;
		cout << "1. fill" << endl;
		cout << "2. change" << endl;
		cout << "3. help" << endl;
		cout << "0. leave" << endl;
		cout << "Choose: ";
		return _getch();
	}

	if (level == 22)
	{
		system("cls");
		cout << "---------------------" << endl;
		cout << "Work counter!" << endl;
		cout << "---------------------" << endl;
		cout << "1. Data: " << timeWork[0] << endl;
		cout << "2. Section: " << timeWork[1] << endl;
		cout << "3. Time: " << timeWork[2] << endl;
		cout << "4. Time breaks: " << timeWork[3] << endl;
		cout << "0. leave" << endl;
		cout << "---------------------" << endl;
		cout << "Choose: ";

		return _getch();
	}
}

Do tego dochodzą odpowiednie libki, zmienne etc. Ale to co najważniejsze jest ;) 

0 głosów
odpowiedź 17 października 2017 przez m4sk1n Pasjonat (16,750 p.)
Może z użyciem funkcji, oczywiście inline. (aby nie utracić na wydajności)
komentarz 18 października 2017 przez Shiro Stary wyjadacz (10,300 p.)
Chyba nie do końca rozumiem .. Przecież napisałem że używam funkcji menu(); Masz na myśli inną funkcję czy po prostu nie zauważyłeś jej w kodzie ?

Miłego dnia!

Podobne pytania

0 głosów
1 odpowiedź 747 wizyt
pytanie zadane 20 października 2016 w C i C++ przez perrymoon Nowicjusz (190 p.)
0 głosów
1 odpowiedź 568 wizyt
0 głosów
3 odpowiedzi 200 wizyt
pytanie zadane 7 kwietnia 2019 w C i C++ przez boniek Nowicjusz (190 p.)

92,555 zapytań

141,404 odpowiedzi

319,560 komentarzy

61,941 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!

...