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

2021-09-09 01:43:38 字數 1022 閱讀 7849

一、「懸掛」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, b=1\n");

else

printf("a!=1\n");

以上程式執行結果:

a = 1, b = 1

但是,當初始化時a=0時,**如下:

int a = 0;

int b = 1;

if(a)

if(b)

printf("a=1, b=1\n");

else

printf("a!=1\n");

執行時發現什麼也沒有顯示,再假如a的初始化為1但是b的初始化為0時,**如下:

int a = 1;

int b = 0;

if(a)

if(b)

printf("a=1, b=1\n");

else

printf("a!=1\n");

執行結果:

a!=1

原因分析:會出現以上的結果,是因為else匹配的if並不是if(a),而是if(b),也就是說else會匹配離它最近的if語句,所以我們應為if(a)後面的一整塊加乙個{}以告訴編譯器後面的else是if(a)的才可,即:

int a = 1;

int b = 0;

if(a)

else

printf("a!=1\n");

懸掛else引發的問題

cpp view plain copy include intmain 程式的本意是 若x 0,則進行判斷y是否等於0 若x!0,則輸出x 0。所以當x 0,y 1時,程式應該不輸出任何東西。但是執行結果為 x 0 導致這個問題的原因是 else始終與同一括號內最近的未匹配的if結合。要想實現程式的...

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

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

c陷阱與缺陷 語法「陷阱

語法 陷阱 語法是在詞法的基礎上延伸,它教怎樣組合成宣告,表示式,語句和程式 理解函式宣告 任何c變數宣告都是由 型別 一組類似表示式的宣告符 float f 乙個簡單的變數宣告 float f 這是乙個函式宣告,其返回值 float型別的函式 float f 這是乙個指向float型別的指標 fl...