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

Tablice w switch case

VPS Starter Arubacloud
0 głosów
995 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 700 wizyt
0 głosów
4 odpowiedzi 1,245 wizyt
pytanie zadane 3 stycznia 2017 w C i C++ przez pokrywa1 Użytkownik (990 p.)
0 głosów
2 odpowiedzi 719 wizyt
pytanie zadane 24 listopada 2016 w C i C++ przez mcsobieski00 Nowicjusz (220 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 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!

...