如何在c ++中使用带有用户输入的枚举

时间:2012-10-12 20:35:10

标签: c++ enums

我正在制作一个简单的石头剪刀游戏,我需要使用枚举数据结构。 我的问题是我无法编译以下代码,因为从int(userInput)到Throws(userThrow)的转换无效。

enum Throws {R, P, S};
int userInput;
cout << "What is your throw : ";
cin >> userInput;
Throws userThrow = userInput;

帮助?!

6 个答案:

答案 0 :(得分:3)

你可以这样做:

int userInput;
std::cin >> userInput;
Throws userThrow = static_cast<Throws>(userInput);

答案 1 :(得分:2)

R,P和S在技术上现在是数字的标识符(分别为0,1和2)。你的程序现在不知道0,1和2曾经映射到字母或字符串。

相反,您必须接受输入并手动将其与“R”,“P”和“S”进行比较,如果匹配1,则相应地设置userThrow变量。

答案 2 :(得分:1)

C ++中的

枚举只是整数常量。它们在编译时被解析并变成数字。

您必须通过查找正确的枚举项来覆盖>>运算符以提供正确的转换。我发现this链接很有用。

基本上你从stdin读取一个int并使用Throws来构建Throws(val)项。

相反,如果您希望通过将字符串作为输入直接输入枚举字段的表示,那么它本身就不存在,您必须手动执行,因为,如开头所述,枚举名称只是在编译时消失。

答案 3 :(得分:1)

试试这个:

enum Throws {R = 'R', P = 'P', S = 'S'};
char userInput;
cout << "What is your throw : ";
cin >> userInput;
Throws userThrow = (Throws)userInput;

答案 4 :(得分:1)

由于编译器将枚举视为整数,因此必须匹配手动设置每个枚举的整数以对应ASCII码,然后将整数输入强制转换为枚举。

答案 5 :(得分:0)

你可以试试这个:

int userOption;
std::cin >> userOption;

如果您不想分配用户输入数据,只需要检查然后使用下面的代码

Throws userThrow = static_cast<Throws>(userOption);

如果要在Enum中分配userinput,请使用以下代码

Throws R = static_cast<Throws>(userOption);

在这里根据需要选择R或P或S.