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

Tablice w switch case

Object Storage Arubacloud
0 głosów
1,006 wizyt
pytanie zadane 22 grudnia 2016 w C i C++ przez Nabu Użytkownik (790 p.)

Hej. Proszę o pomoc. Jak zainicjować tablice w switch case? Obecnie wyskakuje błąd:  "cannot convert '<brace-enclosed initializer list>' to 'int' in assignment".

#include<iostream>

using namespace std;

const short WIELKOSC_TAB = 6;
int tab1 [WIELKOSC_TAB];
int wybor;

int main()
{
	cin >> wybor;
	
    switch (wybor)
    {
    case 1:
        tab1 [WIELKOSC_TAB] = {2, 4, 6, 8, 10, 12};
        break;

    case 2:
        tab1 [WIELKOSC_TAB] = {3, 6, 9, 12, 15, 18};
        break;
    }

    for (int i = 0; i < WIELKOSC_TAB; i++)
    {
        cout << tab1[i] << endl;
    }

  return 0;
}

 

4 odpowiedzi

+1 głos
odpowiedź 22 grudnia 2016 przez Michał Muzyka Pasjonat (24,080 p.)
#include<iostream>

using namespace std;

const short WIELKOSC_TAB = 6;
int *tab1;
int wybor;

int main()
{
	cin >> wybor;

	switch (wybor)
	{
	case 1:
		tab1 = new int [WIELKOSC_TAB]{ 2, 4, 6, 8, 10, 12 };
		break;

	case 2:
		tab1 = new int [WIELKOSC_TAB]{ 3, 6, 9, 12, 15, 18 };
		break;
	}

	for (int i = 0; i < WIELKOSC_TAB; i++)
	{
		cout << tab1[i] << endl;
	}

	delete [] tab1;

	return 0;
}

Ja bym to zrobił tak

+1 głos
odpowiedź 22 grudnia 2016 przez playerony Pasjonat (15,240 p.)

Zauważyłem, że wykorzystujesz w obu przypadkach ciągi arytmetyczne dlatego pozwoliłem sobie na lekkie przeróbki:


#include<iostream>

using namespace std;

const short WIELKOSC_TAB = 6;
int* tab1;
int wybor;

int main()
{
    cin >> wybor;

    switch (wybor)
    {
    case 1:
        tab1 = new int[WIELKOSC_TAB];
        for(int i=0 ; i<WIELKOSC_TAB ; i++)
            tab1[i] = 2 + (2 * i);
        break;

    case 2:
        tab1 = new int[WIELKOSC_TAB];
        for(int i=0 ; i<WIELKOSC_TAB ; i++)
            tab1[i] = 3 + (3 * i);
        break;

    default:
        cout << "Zly wybor" << endl;
        break;
    }

    for (int i = 0; i < WIELKOSC_TAB; i++)
        cout << tab1[i] << endl;

    delete[] tab1;

  return 0;
}

+1 głos
odpowiedź 22 grudnia 2016 przez criss Mędrzec (172,590 p.)

Po pierwsze nie możesz odwołać się do całej tablicy, jak próbujesz to tutaj robić. Albo możesz odwoływać się do nazwy tablicy czyli wskaźnika na pierwszy element, albo do któregoś elementu poprzez operator []. Tutaj próbujesz się odwoływać do elementu za ostatnim elementem.

Żeby osiągnać to co, teraz próbujesz zrobić jesteś raczej zmuszony do wypełnienia tablicy w pętli.

    case 1:
        for(int i = i; i <= WIELKOSC_TAB; i++)
           tab1[i] = i * 2 + 2;
        break;
 
    case 2:
        for(int i = i; i <= WIELKOSC_TAB; i++)
           tab1[i] = i * 3 + 3;
        breakl

Ew. skorzystać z std::array i wtedy faktycznie możesz używać tablicy jako pojedynczego "bytu" (obiektu).

0 głosów
odpowiedź 22 grudnia 2016 przez Nabu Użytkownik (790 p.)
Dzięki wszystkim za pomoc. Przyznam, że trochę myląco podałem zawartość tablicy. Docelowo wartości będzie podawać użytkownik, ale dla szybszego testowania programu (gotowy program ma wyliczać kilka funkcji matematycznych z danych zbiorów liczb) chciałem wprowadzić już jakieś liczby. Wiem, że to pewnie banalne, ale nie mogłem poradzić sobie z wyprowadzeniem tablicy ze switcha .

Pozdrawiam

Podobne pytania

0 głosów
3 odpowiedzi 765 wizyt
0 głosów
4 odpowiedzi 1,266 wizyt
pytanie zadane 3 stycznia 2017 w C i C++ przez pokrywa1 Użytkownik (990 p.)
0 głosów
2 odpowiedzi 724 wizyt
pytanie zadane 24 listopada 2016 w C i C++ przez mcsobieski00 Nowicjusz (220 p.)

92,579 zapytań

141,432 odpowiedzi

319,662 komentarzy

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

...