程式編譯執行後出現黑框,但男生/女生統計邏輯未生效,所有資料混在一起運算。原代碼片段:
if (a[i].xb = 1) // 錯誤:使用賦值而非比較
if (a[i].xb = 2)

| 錯誤寫法 | 正確寫法 | 說明 |
|---|---|---|
if (a[i].xb = 1) | if (a[i].xb == 1) | = 是賦值,將 1 存入 xb,表達式值為 1(真),永遠進入此分支 |
if (a[i].xb = 2) | if (a[i].xb == 2) | 同理,賦值 2 且表達式為真,覆蓋前一次賦值,導致所有資料歸類為女生 |
C/C++ 允許在 if 條件中進行賦值,表達式結果即為賦值後的值(非零為真)。這是語言特性而非語法錯誤,編譯器僅在啟用高警告等級(如 -Wall -Wextra 或 /W4)時給出警告:
warning: suggest parentheses around assignment used as truth value
if (a[i].xb == 1) {
// 男生統計邏輯
} else if (a[i].xb == 2) {
// 女生統計邏輯
}
if (1 == a[i].xb),若誤寫 = 會編譯報錯(無法賦值給常數)-Wall -Wextra,MSVC 加 /W4=& (位元 AND) vs && (邏輯 AND)| (位元 OR) vs || (邏輯 OR)^ (XOR) 非冪運算(C 無冪運算子,需用 pow())單一等號 = 在條件判斷中極易造成邏輯災難。養成「常數在左、開啟警告、善用工具」三大習慣,能從源頭杜絕此類低級錯誤,讓除錯時間花在真正的業務邏輯上。