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

C 語言 printf 格式符陷阱:%d 輸出 float 變量為何得到 0?

     編輯:程式設計疑難解答

經典新手代碼:

int a = 5;
float b = 2.5;
printf("%d", b);  // 輸出 0
printf("%f", b);  // 輸出 2.500000

為什麼 %d 輸出 0?

printf 是可變參數函數,**編譯器不會檢查格式字符串與實際參數類型是否匹配**。當用 %d 時,`printf` 按照 int 的大小(通常 4 字節)從棧上讀取資料,但 float 在傳參時會被默認提升為 double(8 字節),且內存佈局完全不同,導致讀取到的位模式被解釋為整數 0。

正確做法

  • 輸出 float/double 必須用 %f(或 %e/%g);
  • 輸出 int 用 %d;
  • 開啟編譯器警告(-Wall -Wformat),GCC/Clang 會在編譯期提示格式不匹配。

補充:%f 輸出 2.000000?

原文提到 %f 輸出 2.000000,實際應為 2.500000。若出現 2.000000,請檢查代碼中是否將 b 錯賦值為 2.0 或存在隱式轉換截斷。

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