как я использую перечисление значений на операторе переключения в C++

Я хотел бы использовать enum значение для a switch оператор. Действительно ли возможно использовать enum значения, включенные в "{}" как выбор для switch()"? Я знаю это switch() потребности intзначение Эгера для направления потока программирования к соответствующему case число. Если это верно, сделайте я просто делаю переменную для каждой константы в enum оператор? Я также хочу, чтобы пользователь смог выбрать выбор и передать тот выбор switch() оператор.

Например:

cout << "1 - Easy, ";
cout << "2 - Medium, ";
cout << "3 - Hard: ";

enum myChoice { EASY = 1, MEDIUM = 2, HARD = 3 };

cin >> ????

switch(????)
{
case 1/EASY:  // (can I just type case EASY?)
    cout << "You picked easy!";
    break;

case 2/MEDIUM: 
    cout << "You picked medium!";
    break;

case 3/HARD: // ..... (same thing as case 2 except on hard.)

default:
    return 0;
}
38
задан Ziezi 2 June 2017 в 14:12
поделиться

5 ответов

Вы можете использовать std::map для сопоставления входных данных с вашим enum:

#include <iostream>
#include <string>
#include <map>
using namespace std;

enum level {easy, medium, hard};
map<string, level> levels;

void register_levels()
{
    levels["easy"]   = easy;
    levels["medium"] = medium;
    levels["hard"]   = hard;
}

int main()
{
    register_levels();
    string input;
    cin >> input;
    switch( levels[input] )
    {
    case easy:
        cout << "easy!"; break;
    case medium:
        cout << "medium!"; break;
    case hard:
        cout << "hard!"; break;
    }
}
6
ответ дан 27 November 2019 в 03:36
поделиться

Вы можете использовать перечислимое значение так же, как целое число:

myChoice c;

...

switch( c ) {
case EASY:
    DoStuff();
    break;
case MEDIUM:
    ...
}
33
ответ дан 27 November 2019 в 03:36
поделиться

Пользовательский ввод всегда будет предоставляться вам в виде строки символов ... если вы хотите преобразовать ввод пользователя из строки в целое число, вам необходимо предоставьте код для этого. Если пользователь вводит число (например, «1»), вы можете передать строку в atoi (), чтобы получить целое число, соответствующее строке. Если пользователь вводит английскую строку (например, «EASY»), вам необходимо проверить эту строку (например, с помощью strcmp ()) и присвоить переменной соответствующее целочисленное значение в зависимости от совпадения проверки. Если у вас есть целочисленное значение, полученное из строки ввода пользователя, вы можете передать его в оператор switch () как обычно.

0
ответ дан 27 November 2019 в 03:36
поделиться

Вы на правильном пути. Вы можете прочитать ввод пользователя в целое число и переключить на это:

enum Choice
{
  EASY = 1, 
  MEDIUM = 2, 
  HARD = 3
};

int i = -1;

// ...<present the user with a menu>...

cin >> i;

switch(i)
{
  case EASY:
    cout << "Easy\n";
    break;
  case MEDIUM:
    cout << "Medium\n";
    break;
  case HARD:
    cout << "Hard\n";
    break;
  default:
    cout << "Invalid Selection\n";
    break;
}
18
ответ дан 27 November 2019 в 03:36
поделиться

Некоторые моменты, на которые следует обратить внимание:

Вы всегда должны объявлять свое перечисление внутри пространства имен поскольку перечисления не являются собственными пространствами имен, и у вас возникнет соблазн использовать их как одно целое.

Всегда делайте паузу в конце каждого предложения switch, иначе выполнение будет продолжаться вниз до конца.

Всегда включайте в коммутатор регистр по умолчанию: .

Для ясности используйте переменные типа enum для хранения значений enum.

см. здесь для обсуждения правильного использования перечислений в C ++.

Это то, что вы хотите сделать.

namespace choices
{
    enum myChoice 
    { 
        EASY = 1 ,
        MEDIUM = 2, 
        HARD = 3  
    };
}

int main(int c, char** argv)
{
    choices::myChoice enumVar;
    cin >> enumVar;
    switch (enumVar)
    {
        case choices::EASY:
        {
            // do stuff
            break;
        }
        case choices::MEDIUM:
        {
            // do stuff
            break;
        }

        default:
        {
            // is likely to be an error
        }
    };

}
8
ответ дан 27 November 2019 в 03:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: