2015-10-15 93 views
5

我想这个转换成switch语句switch语句多字符常量

if (codeSection == 281) 
    cout << "bigamy"; 
else if (codeSection == 321 || codeSection == 322) 
    cout << "selling illegal lottery tickets"; 
else if (codeSection == 383) 
    cout << "selling rancid butter"; 
else if (codeSection == 598) 
    cout << "wounding a bird in a public cemetery"; 
else 
    cout << "some other crime"; 

// Actual switch statement 
switch (codeSection) 
{ 
    case '281': 
     cout << "bigamy" << endl; 
     break; 

    case '321': 
    case '322': 
     cout << "selling illegal lottery tickets" << endl; 
     break; 

    case '383': 
     cout << "selling rancid butter" << endl; 
     break; 

    case '598': 
     cout << "wounding a bird in a public cemetery"; 
     break; 

    default: 
     cout << "some other crime"<< endl; 

} 

编译器说switch语句多字符常量,并给了我一个黄色的警告,但仍然编译。我的问题是这种情况应该只是字符形式?类似情况下,“2”

+0

你应该知道,编译器**警告**是你应该在劝告下采取的,但不一定会破坏任何东西。事实上(但并非必须),许多警告可以关闭。 **错误**,另一方面,阻止您的代码编译或正确运行。 – CodeMouse92

回答

5
case '281': 

应该

case 281: 

,同样的休息,否则编译器“认为”您尝试使用多字符常量,这是不是你大概是什么想。

A case不一定是char。实际上,它必须是一种与转换和积分促销后的条件类型相同类型的常量表达式,请参阅http://en.cppreference.com/w/cpp/language/switch

+0

...原因是,将某些内容用单引号括起来将其指定为字符文字,而在这种情况下将它们关闭则使其成为整数文字。 – CodeMouse92

+0

@ JasonMc92真正的afaik多字符常量在某种程度上是不鼓励的,因为它们的值是实现定义的。 – vsoftco

+0

是的,你说得对。我在这个主题上找到了[这篇文章](http://www.zipcon.net/~swhite/docs/computers/languages/c_multi-char_const.html)。 – CodeMouse92