2017-03-11 69 views
-2

我很困惑。只是想熟悉switch structures並獲得「1」作爲該代碼的結果是:3%3 = 1? Noob警報

int x = 13; 

switch(x % 5) { 

    case 0: x=2; break; 
    case 1: x=3; break; 
    case 2: x=4; break; 
    case 4: x=5; break; 
    default: x = x % 3; 
} 

cout << x; 

我以爲開關表達會比較其結果和不同的情況。 3的情況下沒有const_i的情況,所以我已經預測3%3 = 0。但結果是1.

如果我更改默認值:x = x%3到x%7,我明白x仍然是13,但是爲什麼?

感謝您的解釋!

+4

'x%5'不修改'x'。當你到達你的'default'時,''標籤'x'仍然是'13'。 – AnT

+0

'13%3'正確評估爲'1'。 – Charles

+0

13和3不是相同的數字。 – hobbs

回答

3

由於沒有case這樣的:

case 3: 

本聲明將被執行:

default: x = x % 3; 

,其結果是:

13%3 = 1

1

如果您將switch中的控制表達式重寫爲

switch (x = x % 5) 

或,等價地,如

switch (x %= 5) 

然後x值將變爲3。然後執行將跳轉到default:標籤,並且您的x = x % 3表達式將設置爲x0,完全如您所期望的那樣。

但是,您的原始控制表達式不會修改x。它正確計算x % 53,但保持x不變。當您到達default:標籤時,x仍然爲13。所以,x = x % 3正確設置x1

0

這是因爲您在切換到x時未指定計數值。 13%5我3但沒有3的情況下使用默認。但是由於您沒有將計數值分配給x仍然是13,所以3%13是1.嘗試將開關切換爲開關(x = x%5)