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

Switch-case enum

Object Storage Arubacloud
0 głosów
1,264 wizyt
pytanie zadane 3 stycznia 2017 w C i C++ przez pokrywa1 Użytkownik (990 p.)
Witam mam pytanie odnosnie c++ switch - case. Czy dało by rade zamiast np case 1 case 2 case 3 itp dać np case wojownik: case: lucznik w sensie zamiast cyfry żeby pisać tekst . Jeśli by ktoś mógł to   najlepiej było by to pokazać na przykładzie z kawałkiem kodu .

4 odpowiedzi

+4 głosów
odpowiedź 3 stycznia 2017 przez draghan VIP (106,230 p.)

Uciekłeś z czatu akurat jak Ci chciałem wstawić link. :)

enum class Zawod
{
    wojownik,
    zolnierz
};

int main()
{
    Zawod postac = Zawod::wojownik;

    switch(postac)
    {
    case Zawod::wojownik:
        return 10;
        break;
    case Zawod::zolnierz:
        return 11;
        break;
    }
    return 0;
}

 

komentarz 3 stycznia 2017 przez pokrywa1 Użytkownik (990 p.)
Dzięki
+3 głosów
odpowiedź 3 stycznia 2017 przez timrh Mądrala (6,030 p.)
edycja 3 stycznia 2017 przez timrh

Da się.

enum KlasaPostaci { Wojownik, Lucznik, Mag };

int main()
{
 KlasaPostaci klasa = Wojownik;

 switch(klasa)
 {
  case Wojownik:

  break;
  case Lucznik:

  break;
  case Mag:

  break;
 }
}

A jeżeli masz enum w klasie:

class Postac
{
public:
	enum KlasaPostaci { Wojownik, Lucznik, Mag };
};

I chcesz z niego skorzystać na zewnątrz klasy, to musisz użyć operatora zakresu :: odnosząc się do klasy w której enum się znajduje.

Postac::KlasaPostaci klasa = Postac::Wojownik;

 

komentarz 3 stycznia 2017 przez pokrywa1 Użytkownik (990 p.)
Dzięki wlasnie tg potrzebowałem :)
+1 głos
odpowiedź 3 stycznia 2017 przez timrh Mądrala (6,030 p.)
edycja 4 stycznia 2017 przez timrh

Nie możesz zapisać:

cin klasa

Musisz stworzyć inną zmienną typu char lub string przechowującą wybór a potem ją pobrać poprzez strumień wejścia, np. tak:

char wybor;

cin >> wybor;

Potem tylko sprawdzasz jej wartość i ustalasz wartość zmiennej klasa, pamiętaj że wartość zmiennych char zapisuje się poprzez apostrofy i mają one tylko jeden znak (char - character). Masz poprawiony kod:

Jeśli czegoś nie rozumiesz to pisz, a jeśli uznałeś tą odpowiedź za wartościową oznacz ją jako najlepszą. :)


UPDATE:

Możesz też po prostu zrobić zmienną int, wpisać ją a potem zrobić rzutowanie na enum KlasaPostaci. Domyślnie pierwszy element enumu ma wartość 0, a dalej już są to wartości o 1 większe od poprzednich, jednak możesz je zmieniać:

enum Klasa
{
 smogor = 2,
 druid = 5,
 ksiegowy //będzie mieć wartość 6
};

Kod:

#include <iostream>
#include <cstdlib>
#include <string>

using namespace std;

enum KlasaPostaci { smogor, druid, ksiegowy };

int main()
{
	cout << " Witaj posuzkiwaczu, znalazlem cie rannego pod drzewem i uleczylem. Wybierz klase postaci jaka chcialbys kontynuowac: " << endl;
	cout << " [1] Smogor " << endl;
	cout << " [3] druid " << endl;
	cout << " [4] ksiegowy " << endl;
	cout << " wpisz klase postaci: ";

	int wybor;

	cin >> wybor;
	KlasaPostaci klasa;

	klasa = (KlasaPostaci)wybor; //rzutowanie na enum KlasaPostaci

	switch (klasa)
	{
	case smogor:
		break;
	case druid:
		break;
	case ksiegowy:
		break;
	default:
		break;

	}
	return 0;
}

Dzięki takiemu zapisowi możesz zrobić jeszcze obsługę poprawności zakresu. A jeśli nie potrzebujesz zapisywać wpisanej wartości jako zmiennej wyliczeniowej (enum), to możesz po prostu zapisać:

	int wybor;
	cin >> wybor;

	switch (wybor)
	{
	case smogor: //wpisano 0
		break;
	case druid: //wpisano 1
		break;
	case ksiegowy: //wpisano 2
		break;
	default:
		break;
	}

 

komentarz 3 stycznia 2017 przez pokrywa1 Użytkownik (990 p.)
Dałbym najlepsza tylko mam problem z tym ze własnie  będę tu wpisywać  numerki 1. To ktoś tam 2 . To ktoś.  A ja chciałem żeby to było ze musze napisać ręczne która klaserowa bym chciał wybrać . Jest taka możliwość w switch  case czy tylko w if ?
komentarz 3 stycznia 2017 przez timrh Mądrala (6,030 p.)
edycja 3 stycznia 2017 przez timrh
@pokrywa1 Zobacz poprawioną odpowiedź ;)
0 głosów
odpowiedź 3 stycznia 2017 przez pokrywa1 Użytkownik (990 p.)

wie ktos co w tym kodzie jest nie tak ? jesli mozna to prosze o wyjasnienie i poprawienie

#include <iostream>
#include <cstdlib>

using namespace std;

enum KlasaPostaci {smogor, druid, ksiegowy};

int main()
{
    cout << " Witaj posuzkiwaczu, znalazlem cie rannego pod drzewem i uleczylem. Wybierz klase postaci jaka chcialbys kontynuowac: " << endl;
    cout << " [1] Smogor " << endl;
    cout << " [3] druid " << endl;
    cout << " [4] ksiegowy " << endl;
    cout << " wpisz klase postaci: ";

    KlasaPostaci klasa = druid;
 
    cin klasa;

    switch(klasa)
    {
    case smogor:
        break;
    case druid:
        break;
    case ksiegowy:
        break;
    default:
        break;

    }


    return 0;
}

 

komentarz 3 stycznia 2017 przez draghan VIP (106,230 p.)

Powinieneś zapisać:

cin>>klasa;

tylko w ten sposób będziesz musiał podawać wartości 0-2.

Istnieje możliwość aby w definicji enum podać jawnie wartości dla identyfikatorów:

enum KlasaPostaci {smogor = 1, druid = 3, ksiegowy = 4};

 

Podobne pytania

0 głosów
3 odpowiedzi 760 wizyt
0 głosów
2 odpowiedzi 724 wizyt
pytanie zadane 24 listopada 2016 w C i C++ przez mcsobieski00 Nowicjusz (220 p.)
0 głosów
0 odpowiedzi 220 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

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

...