用c ++中的字符串切换case

时间:2014-11-14 16:11:05

标签: c++ string enums

我想用字符串写一个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;?

这个错误的原因是什么?

有没有其他方法用字符串写一个开关?

4 个答案:

答案 0 :(得分:2)

不要与语言作斗争。如您所知,您无法在C ++中打开字符串。

改为使用ifelse 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;
      }
     }