阿摩線上測驗 登入

申論題資訊

試卷:109年 - 109 身心障礙特種考試_三等_資訊處理:程式語言#86491
科目:程式語言
年份:109年
排序:0

申論題內容

一、
(一)在程式語言中,什麼是懸置 else 的問題?(5 分)

詳解 (共 3 筆)

詳解 提供者:Clown(2021上岸

if 條件A
   if 條件 A1
   else 
編譯器不清楚else是要跟哪個if做結合

詳解 提供者:hchungw

在程式語言中,"懸置 else"(Dangling else)問題是一種在使用嵌套的條件語句(如 if-else)時可能出現的模糊或歧義情況。具體來說,它發生在程式碼中有多個 if 語句,但缺少足夠的花括號或其他明確語句來區分 else 語句應該與哪個 if 語句匹配。

懸置 else 問題的示例

假設有如下的程式碼:

c
複製程式碼
if (condition1) if (condition2) statement1; else statement2;

這裡有兩個 if 語句和一個 else 語句。問題在於 else 到底應該匹配哪個 if 語句?根據語言的不同,這個問題的解決方式也會不同,但大多數語言都會採取"最近配對原則"(closest match principle),即 else 會匹配最近的未配對 if。

在這個例子中,else 會匹配最近的未配對 if(即 if (condition2)),所以程式碼的邏輯是:

c
複製程式碼
if (condition1) { if (condition2) { statement1; } else { statement2; } }

如何解決懸置 else 問題

為了避免這種歧義,通常建議使用花括號({})來明確地分隔條件語句的範圍。以下是解決這個問題的方法:

c
複製程式碼
if (condition1) { if (condition2) { statement1; } } else { statement2; }

在這個修正的例子中,else 明確地與外層的 if (condition1) 配對。

不同語言的處理方式

不同的程式語言可能對懸置 else 問題有不同的處理方式,但大多數現代語言都採用"最近配對原則"。例如:

  • C/C++、Java、JavaScript、Python:都會將 else 與最近的未配對 if 語句匹配。
  • Perl:同樣採用最近配對原則。

總結

"懸置 else" 問題是一種程式碼中的模糊或歧義情況,常見於嵌套條件語句。解決這個問題的最好方式是使用花括號來明確分隔條件語句的範圍,從而避免任何不必要的混淆。這樣不僅能夠提高程式碼的可讀性,還能避免潛在的邏輯錯誤。

詳解 提供者:Wen

dangling -else problem

因語意不明而產生的問題
if (0)
    if (1)
        printf("inner if");
else
    printf("outer if");

else 無法確定為哪個if的,解決方法:加上括弧{}或再加個else