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

C語言格式輸入輸出:%ld 與 %lf 完全解析

     編輯:C 語言問答

核心結論

格式符對應類型語義
%ldlong int長整型(有符號)
%lfdouble雙精度浮點型

細節深挖

1. 整型家族的「長」

  • int:通常 16/32 位,視平台而定;
  • long:C90 保證 ≥32 位,Windows 64 位下仍為 32 位,Linux 64 位為 64 位;
  • long long:C99 引入,保證 ≥64 位,打印用 %lld。

建議:使用 <stdint.h> 定義的 int32_t、int64_t 等確寬類型,配合 PRId32、PRId64 宏,實現跨平台無縫遷移。

2. 浮點型家族的「雙」

  • float:單精度,32 位,有效位數約 6-7 位,%f;
  • double:雙精度,64 位,有效位數約 15-16 位,%lf(scanf 必須用 %lf,printf 兼容 %f);
  • long double:擴展精度,通常 80/128 位,%Lf。

3. scanf 與 printf 的差異陷阱

double d;
scanf("%f", &d);   // 錯誤!%f 對應 float*,會導致棧損壞
scanf("%lf", &d);  // 正確

printf("%f", d);   // 正確,printf 可用 %f 輸出 double
printf("%lf", d);  // 也正確,C99 允許

根本原因:scanf 需要根據格式符確定寫入內存的字節數,而 printf 只讀取值,float 會默認提升為 double 入棧。

最佳實踐速查表

場景類型scanfprintf
長整數long%ld%ld
長長整數long long%lld%lld
雙精度double%lf%f / %lf
長雙精度long double%Lf%Lf
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved