懸掛else引發的問題

2021-08-20 19:08:52 字數 516 閱讀 3229

[cpp] 

view plain

copy

#include 

intmain()  

程式的本意是:若x==0,則進行判斷y是否等於0;若x!=0,則輸出x!=0。

所以當x=0,y=1時,程式應該不輸出任何東西。

但是執行結果為:x!=0

導致這個問題的原因是:else始終與同一括號內最近的未匹配的if結合。

要想實現程式的本意,修改如下:

[cpp] 

view plain

copy

#include 

intmain()  

else

printf("x!=0\n"

);  

return

0;  

}  執行上述程式,不輸出任何結果,符合我們的本意。

很多時候我們總是認為,當乙個if巢狀另乙個if且後面只跟一條語句的時候,沒有必要加括號。但是上面的錯誤告訴我們,這並不是乙個好的習慣,可能導致嚴重的錯誤。

C語法陷阱 「懸掛」else引發的問題

一 懸掛 else引發的問題 導論 if與else的匹配問題雖然簡單,但是很容易由於粗心犯一些比較簡單的錯誤。1.舉個例子,想要實現乙個功能 如果a 1且b 1時列印出 a 1,b 1 如果a不等於1則列印出 a 1 則 如下 int a 1 int b 1 if a if b printf a 1...

C語言中的「else懸掛」問題

在c語言中,編譯器通常將else與上乙個 最近的 if進行匹配,除非通過花括號來制定匹配關係。看下面乙個例子 example 1 x 11,y 9 include int main 其輸出為 由於else是與最近的if響匹配,所以上述 實際上與下面的 功能一致 example 2 x 11,y 9 ...

指標懸掛問題

為了說明什麼是指標懸掛問題,讓我們考慮下面使用簡單字串類string的程式例子 include string.h class string string void main 在上列程式中,我們沒有為string類過載賦值運算子,因此,賦值表示式 s1 s2 是使用預設的賦值運算子完成s2對s1的賦值...