2016-04-24 27 views
-3

我正在試圖製作一個輸出文件中使用最多的字符的程序。爲什麼編譯器不讓我在開關盒中使用變量?

爲什麼編譯器給我一個錯誤,當我試試這個:

for (char i = 97 ; i <=122 ; i ++) { 
     switch (x) { 

       case i : 
       break; 
     } 
    } 

此代碼使用一個開關,以獲得最常用的字符。錯誤是:

'i' cannot appear in a constant-expression 
+1

因爲它違反規範。 – xaxxon

+0

@xaxxon有什麼方法可以修復它? –

+3

它與循環無關,'case'「參數」需要保持不變,而'i'不是。 –

回答

0

case標籤必須編譯時間常數,你要使用可變i,所以你得到的,而描述性錯誤消息。

如果您需要針對變量進行測試,則直接替換爲if-else if -...- else梯形圖。雖然你的簡單情況沒有「其他」部分,此外,break突破了switch,所以你不能用它來突破一個循環,然後(直接替換將使用goto,但它的更好地重新思考幾乎所有情況下都是你的邏輯)。

所以寫你這樣的代碼:

for (char i = 97 ; i <=122 ; i ++) { 
    if (x == i) { 
     break; // did you mean to break the loop? 

    } 
} 
+2

同樣值得注意的是,OP可能認爲他正在迭代'a'到'z' - 但是C++標準並不能保證這一點,事實上有些機器並不是真的。 –

+0

@hyde謝謝,我現在明白了。 (我是一個初學者) –

+0

@MartinBonner我主要是這樣認爲的,指出這只是無用的信息超載對於剛剛學習C++的人來說......但是這是一個教育學意見。 – hyde

0

「我」不能出現在一個常數表達式 因爲編譯器不明白什麼是「i'.Next,你應該通過我進入 開關。 你可以做到。

相關問題