[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的賦值...