2014-04-26 82 views
-5

該程序是這樣的C/C++多個條件,如果聲明

if(z = x < y){ 
    x +=3; 
    y -= 1; 
} 
else 
    x = y++; 

輸入值x = 7y = 7z = 2。 輸出值爲x = 7,y = 8z = 0

我不知道這個聲明是如何工作的... 任何人都可以幫我嗎?

+0

特別if語句...我不知道的情況是什麼 –

+1

編譯並運行代碼。添加大量的日誌記錄,直到你理解它。 (你知道哪一個'if'執行了嗎?) –

+0

我認爲其他部分? –

回答

2

首先評估比較,因爲<=具有更高的優先級。比較的結果是false(即轉換爲0),然後z設爲0.然後將條件評估爲false,因此執行else分支,其中首先進行分配,然後增加y(請參閱運營商後綴++)。順便說一句,你不應該寫這樣的代碼,但作爲z = (x<y),所以沒有人會感到困惑。其餘的則如下。

+0

我明白這是不好的編碼,但這只是我的一個測試問題,我從來不明白它的作用 –

+0

並且感謝您!!這非常有幫助 –

+0

@programing_is_hard:歡迎來到Stackoverflow!請花一些時間閱讀[關於頁面](http://stackoverflow.com/about),因爲您的個人資料顯示您還沒有這樣做。但首先,請閱讀[有人回答我的問題,該怎麼辦!?](http://stackoverflow.com/help/someone-answers)。 – usr2564301

2

由於x < y爲false,因此您可以在if的腦海中用替換爲false。這應該使代碼變得無法理解。

2

賦值表達式的值是賦值,所以z = x < y的值只是x < y的值(即true或false)。變量z不使用你的代碼,作爲可以簡單地寫:

if (x < y) { x += 3; y -= 1; } 
else  { x = y; ++y;  } 
0

做它以圖形:

x = 7 ; y = 7 ; 

if(z= x < y){ // x = (7 < 7) => z = 0, 
    x +=3; // Not executed 
    y -= 1; 
} 
else 
x = y++; // x = 7, y = y + 1 (Y = 8)