代碼:
if (!i%j) break; // 錯誤
C 語言運算子優先級:`%` > `!`。`!i%j` 等價於 `(!i) % j`。`i` 為非零整數,`!i` 為 0,`0 % j` 恆為 0,`if(0)` 永不成立,`break` 永不執行,內層迴圈跑完,所有數字都被判定為質數並輸出。
if (!(i % j)) break; // 明確優先計算餘數,再邏輯非
// 或
if (i % j == 0) break; // 更直觀:能整除即非質數
#include
int main() {
for (int i = 2; i < 100; i++) {
int j;
for (j = 2; j < i; j++) {
if (i % j == 0) break;
}
if (j == i) printf("%d\n", i);
}
return 0;
}
核心教訓:**複合條件務必加括號明確優先級**,養成 `if ((a % b) == 0)` 風格,避免隱性 Bug。