關于輸入,float用%f,double用%lf
而輸出時,無論是float還是double,都用%f
原文請見:http://poj.org/showmessage?message_id=126922
Posted by qu317058542_scuat 2009-08-23 21:15:44onProblem
3744
問:有人告訴我不能在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 --#
具體的看
http://book.csdn.net/bookfiles/892/10089228074.shtml,這兒還有個表
若想看C++标準看這 CSDN上的飛雪大牛摘的
http://hi.baidu.com/feixue/blog/item/4a84a97732457d12b051b90e.html