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

C 語言三角形面積計算:double 型別對應 %lf 格式字串修正指南

     編輯:程式設計綜合問答

錯誤程式碼

double a, b, c, s;
scanf("%f%f%f", &a, &b, &c);  // 錯誤:%f 對應 float
printf("s=%f", s);              // 錯誤:%f 對應 float

根本原因

  • double 佔 8 bytes,float 佔 4 bytes。
  • scanf("%f") 只寫入 4 bytes,高位殘留垃圾值 → 數值錯誤。
  • printf("%f") 讀取 4 bytes 解釋為 float,同樣導致輸出錯誤。

正確格式字串對照表

修正後程式碼

#include <stdio.h>
#include <math.h>

double sabc(double a, double b, double c) {
    double p = (a + b + c) / 2.0;
    return sqrt(p * (p - a) * (p - b) * (p - c));
}

int main() {
    double a, b, c, s;
    printf("請輸入三角形三邊長:");
    scanf("%lf%lf%lf", &a, &b, &c);  // 關鍵修正
    s = sabc(a, b, c);
    printf("面積 s = %.2f\n", s);     // printf 可用 %f
    return 0;
}

延伸提醒

  • scanf 系列必須精確匹配型別大小,否則未定義行為。
  • printf 因預設引數提升,float 自動轉 double,故 %f 兼容兩者;但 scanf 無提升機制,嚴禁混用。
  • 良習:scanf 全用 %lf 讀 double,printf 統一 %f 輸出浮點數。

牢記 scanf 讀 double 用 %lf,printf 輸出浮點數用 %f,徹底根除型別不匹配導致的數值謎之錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
型別scanfprintf備註
float%f%f預設提升為 double,printf 兩者通用
double%lf%f 或 %lfscanf 必須 %lf;printf %f/%lf 均可 (C99)
long double%Lf%Lf