2013-06-28 179 views
3
if()//first if 
{ 
    if()//second if 
    statement; 
} 
else 
statement; 

我知道else比賽與第一if但我的問題是爲什麼呢?我覺得像這樣,第一ifelse在同一個範圍(主本地範圍爲例)和第二個if是否在else沒有可見性的地方範圍內?這是正確的嗎?複合IF語句範圍

+2

你的解釋聽起來很正確 - 你在問什麼? –

+0

'else'匹配最後的'if'語句,不包括用括號括起來的語句(在更局部的範圍內)。所以是的,這是正確的 – tay10r

+0

@TaylorFlores我知道我已經寫了大量的代碼作爲一名大學生,但是當我問教授這樣的問題時,他們回答說:「如果if語句中有if語句,那麼它對於塊之外的其他東西「。我希望在這裏得到更好的解釋。 – user1478167

回答

9

if....else基本語法是:

   --optional- 
if(expr) stmt [else stmt] 

,如果你只是有你的例子減去他們倒是窩這樣的括號:

  ---------stmt---------- 
if(expr) if(expr) stmt else stmt 

基本意思是else獲取與約束最近可用的if, 以及外部if的語法得到滿足,因爲內部if...else是語句

添加括號給出(具有所示再次第一整體語法):

if(expr)  stmt  [else stmt] 

     --compound-stmt-- 
if(expr) { if(expr) stmt } else stmt 

在這裏,那麼內if(expr) ..stmt封入複合語句(這是一個陳述的subvariety)內部,並且最近仍然開放(閱讀:範圍內)if是第一個。您還可以查看複合語句的結尾 - 即關閉大括號 - 關閉所有包含的語法結構。

沒有compound if,只有if控制複合語句。

5

的語法去如下:

'if' '(' <condition> ')' <statement-1> [ 'else' <statement-2> ] 

存在一個跟隨if一個語句,下面的可選else一個聲明。每條語句可以是塊語句,在這種情況下,您必須將它括在一對大括號中。

既然你確實有花括號,嵌套if是一個<statement-1>在上面的語法;因此,else屬於外部if

請注意,如果您刪除大括號,else將屬於內部if

5

原因else匹配的第一個if是因爲你迫使它與{}

什麼{}做的就是他們採取的任何數量的報表,並把它變成一個代碼「塊」 ,這是由控制語句(如if)類似一個語句

處理,如果你的代碼並沒有把第二個if語句到像下面

那麼else實際上對應第二if

3

「我知道,其他人匹配的第一個,如果但我的問題是爲什麼呢?」

爲什麼它這樣設計的

所以,有可能是語句是這樣的:

if (istrue) 
    if (thatstrue) dosomething(); 
    else donothing2(); 
else donothing1(); 

沒有以其他方式寫括號,就像這樣:

if (istrue){ 
    if (thatstrue) dosomething(); 
    else donothing2(); 
} else donothing1(); 

還要注意的是黏合無關 - 它並不影響執行語句else