2017-05-29 32 views
0
void main(void) 
{ 
    int i; 
    for(i=1;i<=5;i++) 
    { 
     if(i/5) 
      continue; 
     printf("%d",i); 
    } 
} 

我簡單的查詢是,如果內部條件「if」計算爲一個分數,它被視爲0?因爲這裏輸出是1234,所以當條件是1/5,2/5,3/5,4/5它是i的初始值,當5/5 = 1時它正在執行continue語句。當條件裏面,如果語句是分數

+1

什麼是*整數除法*規則? –

+2

'i/5'是一個整數除法(無浮點操作數),因此結果被截斷(小數部分被捨棄)。 – HolyBlackCat

+0

如果你只想知道有關師的操作,爲什麼你會問一些關於「如果」的情況?該部門也將在其他地方以相同的方式完成。 – Gerhardh

回答

6

i/5將被視爲整數除法(當然iint當然),無論它出現在哪裏(if或其他)。所以兩個整數之間的/實際上會給你商。

i/5將給出0i ∈ {0, 1, 2, 3, 4}1i = 5

當條件表達式爲true時,if語句執行條件語句(在此例中爲continue語句)。整數值被轉換爲布爾值,如下所示:零變爲false,任何其他值變爲true。由於直到i==5之前表達式不會計算爲非零值,所以條件語句在此之前不會執行。

+0

「零變成真,其他任何值變成假」 - 你確定你不是相反的意思嗎? –

+0

@GovindParmar是的,謝謝 – bolov

2

只要你有

if (expr) 

expr顯然不是東西是真/假,你總是可以認爲它是這樣的:

if((expr) != 0) 

所以如果expr評估的東西分數,好吧,只要分數不等於0,條件將評估爲真。

但是,在你的例子中,因爲i是一個整數,所以i/5將做整數除法,它將永遠不會給出分數。如果i小於5,則i/5將爲0,這將最終導致條件爲false。