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

Wpisywanie fragmentu kodu do funkcji

Object Storage Arubacloud
0 głosów
187 wizyt
pytanie zadane 2 grudnia 2017 w C i C++ przez syzmon9 Początkujący (250 p.)

Cześć wszystkim!

Stoję przed koniecznością wyprowadzenia części kodu do funkcji. Kod ten wygląda źle bo jest powtarzany 6 razy w metodzie. Problem polega na tym że w tym fragmencie kodu nadpisuję konkretne właściwości obiektu. Ten fragment wygląda następująco:

cin >> roboczyString;
Tablica[i].wartosc1 = roboczyString;
cout << "Czy chcesz dalej zmieniac wartosci? t/n ";
cin >> koniecEdycji;
while (koniecEdycji != "t" && koniecEdycji!= "n")
{
	cout << "Ta opcja nie istnieje. Spróbuj ponownie";
        cin >> koniecEdycji;
}

Cały ten fragment jest w instrukcji switch i zawiera się w każdym z przypadków (case). W każdym case kod różni się tylko wpisem do tablicy Tablica, w taki sposób, że w pierwszym case jest 

Tablica[i].wartosc1 = roboczyString;

w drugim 

Tablica[i].wartosc2 = roboczyString;

w trzecim 

Tablica[i].wartosc3 = roboczyString;

i tak dalej. Wspomnę jeszcze że cała instrukcja switch-case jest zawarta w pętli for. Pytanie jest następujące - czy da się to w jakiś sposób wynieść do oddzielnej funkcji? W jaki sposób o ile to możliwe podawać przypisanie do różnych wartości tablicy? Jeśli nie da się z tym nic zrobić w ten sposób to zostawię to tak jak jest ale powiem szczerze że irytuje mnie to że kod powtarza się 6 razy w niemal niezmienionej formie. Za wszelkie porady i pomysły będę wdzięczny.

2 odpowiedzi

0 głosów
odpowiedź 2 grudnia 2017 przez Hunter94 Mądrala (6,290 p.)
Wiele tu nie wyczarujesz możesz przenieść switcha do funkcji wewnątrz klasy która ustawi ci stringa na podstawie dwóch argumentów, int i = numer_wartosci, string co wstawić. Ustawianie pól klasy z palca jest nieeleganckie i prowadzi do błędów. stworzenie settera wyczyści Ci maina i sprawi że twój kod będzie lepszy.
0 głosów
odpowiedź 2 grudnia 2017 przez j23 Mędrzec (194,920 p.)

Można na przykład tak:

std::reference_wrapper<std::string> wartości[] = { Tablica[i].wartosc1, Tablica[i].wartosc2, Tablica[i].wartosc3, /* itd. */ };
...

cin >> roboczyString;
wartosc[ jakis_indeks ].get() = roboczyString;
cout << "Czy chcesz dalej zmieniac wartosci? t/n ";
...

 

Podobne pytania

+1 głos
0 odpowiedzi 440 wizyt
pytanie zadane 2 czerwca 2021 w C i C++ przez Mavimix Dyskutant (8,390 p.)
0 głosów
2 odpowiedzi 171 wizyt
pytanie zadane 7 marca 2017 w C i C++ przez krzakurts Obywatel (1,470 p.)
+1 głos
1 odpowiedź 588 wizyt
pytanie zadane 24 stycznia 2021 w C i C++ przez hicodyn Początkujący (420 p.)

92,554 zapytań

141,399 odpowiedzi

319,535 komentarzy

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

...