關於輸出用 lf和 f的問題

2021-06-18 05:23:27 字數 522 閱讀 9577

問:有人告訴我不能在printf中使用%lf。為什麼printf()用%f輸出double型,而scanf卻用%lf呢?

答:printf的%f說明符的確既可以輸出float型又可以輸出double型。根據「預設引數提公升」規則(在printf這樣的函式的可變引數列表中,不論作用域內有沒有原型,都適用這一規則)float型會被提公升為double型。因此printf()只會看到雙精度數。參見問題15.2。

(嚴格地講,%lf在printf下是未定義的,但是很多系統可能會接受它。要確保可移植性,就要堅持使用%f。)

參見問題12.15和15.2。

對於scanf,情況就完全不同了,它接受指標,這裡沒有類似的型別提公升。(通過指標)向float儲存和向double儲存大不一樣,因此,scanf區別%f和%lf。

此回答摘自poj1113 discuss,當時錯了很多次,最後才發現是輸出用來%f --#

具體的看

這兒還有個表

若想看c++標準看這 csdn上的飛雪大牛摘的

關於輸出用 lf和 f的問題

f 對應 float lf 對應 double lf 對應 long double e以科學計數法顯示 g在 e和 f中擇短顯示 int m float n scanf lf d n,m 輸入n 81,m 4 cout n 解決辦法 1 將 lf 改為 f 2 將float改為double c 果然...

關於 0x3f3f3f3f 的問題

0x3f3f3f3f是乙個很有用的數值,它是滿足以下兩個條件的最大整數。1 整數的兩倍不超過 0x7f7f7f7f,即int能表示的最大正整數。2 整數的每8位 每個位元組 都是相同的。我們在程式設計中經常需要使用 memset a,val,sizeof a 初始化乙個陣列a,該語句把數值 val ...

關於 wcout 輸出中文的問題

1.cout 場景1 在原始檔中定義 const char str 中文 在 vc 編譯器上,由於windows環境用 gbk編碼,所以字串 中文 被儲存為 gbk內碼,編譯器也把 str 指向乙個包含有 gbk編碼的唯讀記憶體空間 因為是const 用 cout 輸出 str 時,由於中文wind...