代碼存在兩個關鍵錯誤導致邏輯錯誤與編譯失敗:
= 而非比較 ==// 錯誤
else if (b*b - 4*a*c = 0) // 永遠為真(賦值 0 結果為 0 → false,但改變了變量值!)
// 正確
else if (b*b - 4*a*c == 0) // 比較判別式是否為 0
( ) 導致編譯器無法識別// 錯誤:全角括號
#include // 應為 #include
printf("輸入abc的值\n") ; // 分號前有全角空格
scanf("%d%d%d",&a,&b,&c); // & 可能被全角字符干擾
// 正確:半角字符
#include
int main() {
int a, b, c;
printf("輸入abc的值\n");
scanf("%d%d%d", &a, &b, &c);
// ... 後續邏輯
}
#include
#include
void solveQuadratic(int a, int b, int c) {
if (a == 0) {
printf("非二次方程 (a=0)\n");
return;
}
double discriminant = b*b - 4.0*a*c;
if (discriminant > 0) {
double x1 = (-b + sqrt(discriminant)) / (2*a);
double x2 = (-b - sqrt(discriminant)) / (2*a);
printf("兩個實根: x1=%.2f, x2=%.2f\n", x1, x2);
} else if (discriminant == 0) {
double x = -b / (2.0*a);
printf("一個實根(重根): x=%.2f\n", x);
} else {
printf("無實根 (判別式 < 0)\n");
}
}
int main() {
int a, b, c;
printf("輸入 a b c: ");
if (scanf("%d %d %d", &a, &b, &c) == 3) {
solveQuadratic(a, b, c);
}
return 0;
}
==,賦值 = 僅用於變量賦值語句。double 計算避免整數溢出(b*b 可能超過 INT_MAX)。scanf 返回值檢查輸入是否成功。細節決定成敗,養成「半角編碼、== 判斷、返回值檢查」三大習慣可消除 80% 低級錯誤。