带循环的 C++ 枚举行为
C++ enum behaviour with loops
我正在尝试此代码
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 作为任何值的输出
预期输出:
输入-R 输出-0
输入-S 输出-2
输入-P 输出-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>>’```
我不完全确定这是否是你想要的,但下面让用户输入一个字符,然后将相应的枚举值分配给一个变量,然后再次打印相应的字符。 None这个是免费的,如果你想有这样的映射你需要自己实现:
#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 那就是 82
。 82
与枚举值 R
无关。另一方面,如果用户输入 0
,那么您可以通过 static_cast<Throws>(userInput)
将 0
转换为 R
的值,这实际上与您代码中的转换相同,只是它不能像您期望的用户输入那样工作 R
.
我正在尝试此代码
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 作为任何值的输出 预期输出: 输入-R 输出-0 输入-S 输出-2 输入-P 输出-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>>’```
我不完全确定这是否是你想要的,但下面让用户输入一个字符,然后将相应的枚举值分配给一个变量,然后再次打印相应的字符。 None这个是免费的,如果你想有这样的映射你需要自己实现:
#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 那就是 82
。 82
与枚举值 R
无关。另一方面,如果用户输入 0
,那么您可以通过 static_cast<Throws>(userInput)
将 0
转换为 R
的值,这实际上与您代码中的转换相同,只是它不能像您期望的用户输入那样工作 R
.