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

question-closed Zczytywanie konkretnego case

Object Storage Arubacloud
+1 głos
406 wizyt
pytanie zadane 5 maja 2022 w C i C++ przez Blahow Początkujący (280 p.)
zamknięte 5 maja 2022 przez Blahow

Witam,

Mam pytanie odnośnie kodu.

Jak w tym momencie(po 85 linijce) zczytać który case został wybrany i na tej podstawie dodac odpowiednia ilosc xp?

#include <iostream>

using namespace std;

int main()
{
   int klasa = 0;
    cout << "Dostêpne klasy:" << endl;
    cout << "Tank - 1" << endl;
    cout << "Mag - 2" << endl;
    cout << "Assasin - 3" << endl;
    cout << "Goblin - 4" << endl << endl << endl;
    cout << "Wybierz klase postaci:" << endl;
    cin >> klasa;

switch(klasa)
{
    case 1:
    {
    cout << "Wybrales klase Tank " << endl;
    cout << "Wybrana klasa ma:" << endl;
    cout << "18 pkt zdrowia." << endl;
    cout << "5 pkt ataku." << endl;
    cout << "3 pkt inteligencji." << endl << endl;
    break;
    }
    case 2:
    {
    cout << "Wybrales klase Mag" << endl;
    cout << "Wybrana klasa ma:" << endl;
    cout << "9 pkt zdrowia." << endl;
    cout << "7 pkt ataku." << endl;
    cout << "12 pkt inteligencji." << endl << endl;
    break;
    }
    case 3:
    {
    cout << "Wybrales klase Assasin" << endl;
    cout << "Wybrana klasa ma:" << endl;
    cout << "10 pkt zdrowia." << endl;
    cout << "12 pkt ataku." << endl;
    cout << "4 pkt inteligencji." << endl << endl;
    break;
    }
    case 4:
    {
    cout << "Wybrales klase Goblin" << endl;
    cout << "Wybrana klasa ma:" << endl;
    cout << "10 pkt zdrowia." << endl;
    cout << "10 pkt ataku." << endl;
    cout << "2 pkt inteligencji." << endl << endl;
    }
   default:
    {
    cout << "Nie ma takiej klasy." << endl;
    }
    return 0;
}


   int przeciwnik = 0;
    cout << "Wybierz pierwszego przeciwnika" << endl;
    cout << "1" << endl;
    cout << "Robak" << endl;
    cout << "wrog ten ma 3 pkt zdrowia i 2 pkt ataku." << endl;
    cout << "Po zabiciu otrzymujesz 10 XP" << endl << endl;
    cout << "2" << endl;
    cout << "Mucha" << endl;
    cout << "Wrog ten ma 1 pkt zdrowia i 2 pkt ataku" << endl;
    cout << "Po zabiciu otrzymujesz 5 XP" << endl << endl;
    cin >> przeciwnik;

switch(przeciwnik){
  case 1:{
   cout << "Otrzymujesz 10 XP" << endl;
   cout << "Po walce tracisz 2 pkt zdrowia" << endl;
  break;
   }
  case 2:{
    cout << "Otrzymujesz 5 XP" << endl;
    cout << "Tracisz 1 pkt zdrowia" << endl;
    break;
  }
 }
 // W tym momencie potrzebuje zczytać któy case został wybrany i na tej podstawie dodac odpowiednia ilosc xp.
}

 

komentarz zamknięcia: Dostanie odpowiedzi

2 odpowiedzi

0 głosów
odpowiedź 5 maja 2022 przez wizarddos Nałogowiec (25,930 p.)

Tl:DR

To, który case się wybrał, masz zapisane w zmiennej przeciwnik

 

Switch-case to jedna z instrukcji warunkowych, można jej używać zamiennie z if

Czyli ten kod

switch(przeciwnik){
  case 1:{
   cout << "Otrzymujesz 10 XP" << endl;
   cout << "Po walce tracisz 2 pkt zdrowia" << endl;
  break;
   }
  case 2:{
    cout << "Otrzymujesz 5 XP" << endl;
    cout << "Tracisz 1 pkt zdrowia" << endl;
    break;
  }
 }

Można zamienić na 

If(przeciwnik == 1){
   cout << "Otrzymujesz 10 XP" << endl; cout << "Po walce tracisz 2 pkt zdrowia" << endl;
} else if (przeciwnik == 2){
    cout << "Otrzymujesz 5 XP" << endl; cout << "Tracisz 1 pkt zdrowia" << endl;
}

Do czego zmierzam. Zmień switch sprawdza po kolej czy wartość w nawiasie jest taka sama jak przy case. Czyli wywoła się to, co jest równe wartości zmiennej przeciwnik. W tej właśnie zmiennej masz zapisaną tę wartość, a więc też, który case się wywołał.

Z dodaniem XP myślę że sobie poradzisz 

komentarz 5 maja 2022 przez Wiciorny Ekspert (269,710 p.)
przeciwnik nie jest w zasiegu aktualnie miejsca w którym chce się do niego odwołać, zasugerowałem więc warto dodać o przeniesieniu zmiennej -> o zakres wyżej lub  zastosowaniu innej jako przechowywanie wartości, też o zakresie wyżej jednak to jest redundancja imo
komentarz 5 maja 2022 przez Blahow Początkujący (280 p.)

@wizarddos, Dziękujęza odpowiedz.

 

0 głosów
odpowiedź 5 maja 2022 przez Wiciorny Ekspert (269,710 p.)

Ten CASE który zostanie wykonany gdy wartość dla przeciwnik -> jest równa dla danego CASE
Więc sprawdź jaka wartość jest ... dla zmiennej przeciwnik czy jest to jeden, czy jest to dwa. 
Jesli to jest po za zakresem int przeciwnik = 0;
To albo przenies zasieg tej zmiennej wyzej do funkcji, albo zapisz jej wartosc pod inna jakas -> temporary zmienna, ktora jest rowniez wyzej w zasiegu scope 

if(przeciwnik == 2 ) {
 // cos tam 
}

 

komentarz 5 maja 2022 przez Blahow Początkujący (280 p.)
Dziękuję za odpowiedz.

Podobne pytania

0 głosów
1 odpowiedź 344 wizyt
0 głosów
3 odpowiedzi 455 wizyt
pytanie zadane 15 listopada 2015 w C i C++ przez dYstans Początkujący (270 p.)
0 głosów
0 odpowiedzi 90 wizyt

92,555 zapytań

141,403 odpowiedzi

319,560 komentarzy

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

...