2015-10-15 89 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