Я хотел бы использовать 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;
}
Вы можете использовать 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;
}
}
Вы можете использовать перечислимое значение так же, как целое число:
myChoice c;
...
switch( c ) {
case EASY:
DoStuff();
break;
case MEDIUM:
...
}
Пользовательский ввод всегда будет предоставляться вам в виде строки символов ... если вы хотите преобразовать ввод пользователя из строки в целое число, вам необходимо предоставьте код для этого. Если пользователь вводит число (например, «1»), вы можете передать строку в atoi (), чтобы получить целое число, соответствующее строке. Если пользователь вводит английскую строку (например, «EASY»), вам необходимо проверить эту строку (например, с помощью strcmp ()) и присвоить переменной соответствующее целочисленное значение в зависимости от совпадения проверки. Если у вас есть целочисленное значение, полученное из строки ввода пользователя, вы можете передать его в оператор switch () как обычно.
Вы на правильном пути. Вы можете прочитать ввод пользователя в целое число и переключить
на это:
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;
}
Некоторые моменты, на которые следует обратить внимание:
Вы всегда должны объявлять свое перечисление внутри пространства имен поскольку перечисления не являются собственными пространствами имен, и у вас возникнет соблазн использовать их как одно целое.
Всегда делайте паузу в конце каждого предложения 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
}
};
}