Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z menu tekstowym i zmienna string

Ostatnio zmodyfikowano 2013-06-09 18:49
Autor Wiadomość
Karol346
Temat założony przez niniejszego użytkownika
Problem z menu tekstowym i zmienna string
» 2013-06-09 16:50:22
Witam, postanowiłem znów zacząć naukę C++. I próbuję swoich sił pisząc prostą grę tekstową, lecz mam 2 problemy

1)menu
Chciałem zrobić tak:

[G]raj
[A]utor
[W]yjście

i wciśniecie G,A lub W miało przechodzić do podmenu, lecz gdy dam zmienna string wywala błąd:
error: switch quantity not an integer|

a gdy dam zmienną int to wszystko działa z tym że muszą być liczby 1,2,3.

Podmenu jest zrobione za pomocą switch...case, lecz nie wiem czy to dobry pomysł i czy nie lepiej będzie wykorzystać instrukcję warunkową if...else.

2)
Menu jest w int main(), i teraz mam pytanie jak zrobić aby po przejściu do podmenu przejść do int/void graj(), int/void autor()

to mój kod:

C/C++
#include <iostream>
#include <string>
#include <stdio.h>
//#include conio.h

using namespace std;

void moja_funkcja()
{
    printf( "\033[2J" );
    printf( "\033[0;0f" );
}
/*
void tworzenie_postaci()
{
    string nick;                            <-- tutaj mam ten sam problem "error: switch quantity not an integer|"
    cout <<"/n Podaj swój nick:";
    cin >> nick;
    cout << nick "Wybierz profesję:\n ";
}
*/
int main()
{
    cout << "Witaj w Dragon Hunter! \nWciśnij [ENTER].";
    cin.get();
    moja_funkcja();
    cout << "Jesteś w menu głownym gry.";
   
    cout << "\n [1]Graj \n [2]Autorzy \n [3]Wyjście \n ";
    int opcja;
    cin >> opcja;
   
    switch( opcja )
    {
    case 1:
        cout << "===Tworzenie Postaci===";
        //   tworzenie_postaci();
        break;
       
    case 2:
        cout << "strona o autorze";
        break;
       
    case 3:
        cout << "wyjscie z gry";
        break;
       
    default:
        cout << "Podaj liczbę odpowiadającą opcji.";
        break;
    }
   
    return 0;
   
}

PS. Pracuje na systemie linux Ubuntu, w programie Code::Block

Pozdrawiam i dziękuje za pomoc
P-85257
unimator
» 2013-06-09 18:35:07
1. std::string jest typem złożonym (klasą innymi słowy) a switch przyjmuje jako argument/parametr zwykłą zmienną (podstawową). W Twoim przypadku wystarczy wyłuskać znak ze zmiennej std::string metodę std::string::at(unsigned pos), która zwróci zmienną char, czyli typ podstawowy. Jednak o wiele prościej byłoby użyć zwykłej zmiennej char zamiast std::string skoro i tak będziesz pobierał tylko jeden znak.
2. Normalnie, po case x: wywołujesz funkcję graj(), autor() (zależnie od case rzecz jasna) itd., potem break.
P-85266
Karol346
Temat założony przez niniejszego użytkownika
» 2013-06-09 18:49:31
Ok, dziękuje za pomoc.

@edit

Wszystko działa :)
P-85267
« 1 »
  Strona 1 z 1