-4

我正在尝试这段代码

int n,k;
enum Throws {R, P, S};
int userInput;
for(int i=0;i<3;i++)
{
cin>>userInput;
cout<<(Throws)userInput;
}

为什么此代码不将 R 作为输入并提供 0 作为输出并等待下一个输入,而是将 000 作为预期输出的任何值的输出: input-R output-0 input-S output-2 input-P output- 1 但相反,我得到这个输入-R(或 P 或 S)输出 - 000(发生循环退出)不完全确定代码如何感知输入,因为我知道枚举应该像 R=0,P =1,S=2 其中 R,P,S 应该变成整数。我做错了什么或者我的理解是错误的?请有人解释一下怎么做?谢谢

input output window:
input-R
output-R
input-P
output-P
input-S
output-S

这就是我想要得到的输出,我尝试将枚举本身作为输入,但它给出了类似的错误

enum Throws q;
cin>>q;
it gives error: no match for ‘operator>>’```
4

1 回答 1

0

我不完全确定这是否是您想要的,但下面让用户输入一个字符,然后将相应的枚举值分配给一个变量,然后再次打印相应的字符。这些都不是免费的,如果你想拥有这样的映射,你需要自己实现它:

#include <unordered_map>
#include <iostream>
#include <algorithm>

enum Throws {R, P, S};

int main(){
    std::unordered_map<char,Throws> mapping{{'R',R},{'P',P},{'S',S}};
    std::unordered_map<Throws,char> reverse_mapping{{R,'R'},{P,'P'},{S,'S'}};
    char input;

    std::cin >> input;
    Throws t = mapping[input];
    std::cout << "user entered " << input << ", corresponding enum value is " << t << "\n";

    std::cout << "the character for enum value " << t << " is " << reverse_mapping[t] << "\n";
}

例如,当用户输入时1,输出为:

user entered P, corresponding enum value is 1
the character for enum value 1 is P

在您的代码userInput中是一个int并且当用户输入一个字符时,例如R,然后userInput具有表示该字符的整数值,在 ascii thats82中。那82与枚举值无关R。另一方面,如果用户输入,0那么您可以将其0转换为Rvia的值static_cast<Throws>(userInput),这实际上与代码中的转换相同,只是它不像您对用户输入的期望那样工作R

于 2021-07-01T18:21:34.637 回答