如何使用枚举值映射用户输入?

时间:2015-07-15 19:07:01

标签: c++ input enums

我有一个基本的enum声明:

enum Title {Prof, Dr, Mr, Mdm, Mrs, Miss, NA};

我正在尝试使用enum中的正确值映射用户输入(0,1,2,3,4,5,AnyNumber),如下所示:

std::map<std::string,Title> m;
m["0"] = Prof;
m["1"] = Dr;
m["2"] = Mr;
m["3"] = Mdm;
m["4"] = Mrs;
m["5"] = Miss;

std::string stitle;

cout << "\n" << "Title (0:Prof 1:Dr 2:Mr 3:Mdm 4:Mrs 5:Miss Any:NA): ";
cin >> stitle;
Title title = m[stitle];
cout << title; // output 1 when I input 1, output 2 when I input 2 and so on 

我希望上面的代码可以正常工作,但我输入的内容将是cout的输出,而不是enum列表中的值。我的代码有什么问题?

1 个答案:

答案 0 :(得分:2)

enum并没有像你想象的那样真正存储一系列字符,它只是为基础类型的某些值提供了新名称(在你的情况下,int)。 (当然,这有点简化,但足以解释观察到的行为。)

因此,打印enum - 元素不会打印其&#34; name&#34;,但会导致元素转换为基础类型然后打印。