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

C 語言 scanf/printf 格式字符錯誤:%ld 讀取 double 導致負數

     編輯:程式設計綜合問答

問題代碼

double taxsalary;
scanf("%ld", &taxsalary);  // 錯誤:%ld 對應 long int
printf("taxpay:%ld\n", taxpay); // 同樣錯誤

錯誤原因

  • %ld 期望 long int *,實際傳入 double *(8 字節)。
  • 棧上讀取 4 字節(long)卻寫入 8 字節(double),導致棧損壞、數值解讀錯誤,輸出亂碼/巨大負數。

正確格式字符

修正代碼

double taxsalary, taxpay;
scanf("%lf", &taxsalary);      // 讀取 double
printf("taxpay: %.2f\n", taxpay); // 輸出 double,保留兩位小數

避坑指南

  • 開啟編譯器警告:-Wall -Wextra -Wformat (GCC/Clang),/W4 (MSVC) 會提示格式不匹配。
  • 使用 static analysis 工具(Cppcheck、Clang Static Analyzer)。
  • 習慣對照 man 3 scanf / man 3 printf 查閱。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
類型scanfprintf
float%f%f
double%lf%f / %lf (C99 允許 printf 用 %lf)
long double%Lf%Lf
long int%ld%ld