初學者編寫 power 函數計算 n 的 p 次方時,發現無論輸入何值,回傳結果皆為 1。程式碼片段如下:
double power(double n, int p) {
double pow;
int i;
if (n = 0) // 錯誤:這是賦值,非比較
pow = 0;
if (p = 0) // 錯誤:同理
pow = 1;
for (pow = 1, i = 1; i <= p; i++)
pow *= n;
return pow;
}
C/C++ 中 if (n = 0) 是將 0 賦值給 n,運算式值為 0(假),導致 if 區塊不執行;但 n 已被改為 0,後續迴圈 pow *= n 使結果歸零。同理 if (p = 0) 將 p 改為 0,迴圈條件 i <= p 直接不成立,pow 保持初值 1 返回。
if (n == 0) // 使用 == 進行比較
return 0;
if (p == 0)
return 1;
建議:比較運算永遠用 ==,並養成 if (0 == n) 「耶達寫法」習慣,編譯器會在誤寫成 = 時報錯。