我想用字符串写一个switch case。我使用了枚举,我写了这个:
string enum { next = 0, prev = 1, ext = 2 }order;
while(true)
{
cin >> order;
switch(order)
{
case 0:
//do order0
break;
case 1 :
//do order 1
break;
case 2 :
//do order2
return;
break;
default:
cout << "Bad input";
break;
}
}
但结果是这个错误:
错误C2236:意外令牌&#39;枚举&#39;。你忘记了&#39 ;;&#39;?
这个错误的原因是什么?
有没有其他方法用字符串写一个开关?
答案 0 :(得分:2)
不要与语言作斗争。如您所知,您无法在C ++中打开字符串。
改为使用if
,else if
。
您确实会看到不时出现的各种尝试。地图,枚举和哈希是我能想到的三个。但他们只是混淆了。而且你可能需要break
语句,这会使事情进一步恶化。 (如果遵循 有用,那么相应地构造等效的if
块。
您的;
错误是由于string enum
在语法上无效。
答案 1 :(得分:0)
这是什么: -
string enum {
next = 0,
prev = 1,
ext = 2
}order;
应该是: -
enum Mydata {
next = 0,
prev = 1,
ext = 2
};
答案 2 :(得分:0)
错误来自:
string enum {
next = 0,
prev = 1,
ext = 2
}order;
这是无效的语法,枚举和字符串都是类型,您不能使用另一个保留关键字创建类型的实例。
相反,你想要像这样声明枚举:
enum order{
next = 0,
prev = 1,
ext = 2
};
但有可能你真的不想以这种方式解决你的问题。一种简单的方法就是使用带有if
语句或std::map
语句的条件语。
cin >> order;
if(order == "0"){
}else if( order == "1"){
}else{
}
答案 3 :(得分:0)
原因是因为&#39; string enum&#39;无效。 这是一个例子:
enum Orders{
next=0,
prev=1,
ext=2
};
while(true)
{
int oder=-1;
cin>>order;
switch(order)
{
case next:
//do something
break;
case prev:
//do something else
break;
case ext:
//something else
break;
default:
cout << "error\n";
break;
}
}