Bot*_*Pgm 38 c++ enums switch-statement
我想enum
为一个switch
语句使用一个值.是否可以使用所enum
包含的值"{}"
作为switch()
"?我知道switch()
需要一个int
eger值才能将编程流程指向适当的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;
}
Run Code Online (Sandbox Code Playgroud)
Pet*_*man 33
您可以像整数一样使用枚举值:
myChoice c;
...
switch( c ) {
case EASY:
DoStuff();
break;
case MEDIUM:
...
}
Run Code Online (Sandbox Code Playgroud)
Ada*_*erg 18
你走在正确的轨道上.您可以将用户输入读取为整数,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;
}
Run Code Online (Sandbox Code Playgroud)
有些事情需要注意:
你应该总是在命名空间中声明你的枚举,因为枚举不是正确的命名空间,你会想要像它们一样使用它们.
在每个switch子句的末尾总是有一个中断,否则执行将继续向下结束.
始终default:
在开关中包含外壳.
为清晰起见,使用枚举类型的变量来保存枚举值.
请参阅此处,了解在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
}
};
}
Run Code Online (Sandbox Code Playgroud)
您可以使用a 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;
}
}
Run Code Online (Sandbox Code Playgroud)
用户的输入始终以字符串的形式提供给您...如果您想将用户的输入从字符串转换为整数,您需要提供代码来执行此操作。如果用户输入一个数字(例如“1”),则可以将字符串传递给atoi()以获取该字符串对应的整数。如果用户输入英文字符串(例如“EASY”),那么您需要检查该字符串(例如使用 strcmp()),并根据检查匹配的情况将适当的整数值分配给您的变量。一旦获得了从用户输入字符串派生的整数值,就可以像往常一样将其传递到 switch() 语句中。