首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言一元二次方程求根:scanf 格式字符串不匹配導致「無解」誤判

     編輯:程式設計綜合問答

現象

輸入 `1.0 5.0 4.0` 判斷式 `b*b-4ac` 計算錯誤,顯示無解。

根因:%f vs %lf

  • `float` 變量用 `%f` 讀取。
  • `double` 變量**必須用 `%lf`** 讀取(C99 標準)。
  • 代碼中 `a,b,c` 定義為 `double`,但 `scanf("%f%f%f", &a, &b, &c)` 導致內存寫入錯位、數值解析錯誤。

修正代碼

double a, b, c;
printf("請輸入 a b c: ");
if (scanf("%lf %lf %lf", &a, &b, &c) != 3) {
    printf("輸入格式錯誤\n");
    return 1;
}

// 調試:打印讀取值
printf("讀取到: a=%.2f, b=%.2f, c=%.2f\n", a, b, c);

double delta = b*b - 4*a*c;
if (delta < 0) {
    printf("無實數根\n");
} else if (delta == 0) {
    printf("兩個相等實根: x = %.2f\n", -b/(2*a));
} else {
    printf("兩個不等實根: x1 = %.2f, x2 = %.2f\n", 
           (-b + sqrt(delta))/(2*a), (-b - sqrt(delta))/(2*a));
}

通用調試技巧

**讀取後立即打印變量值**,90% 的「邏輯錯誤」其實是輸入環節出問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved