C++玄學問題 關於printf輸出double類型顯示0.000000的原因

運行環境 win10 codeblocks 17.12

一、 C++ double類型用 %lf 格式輸出

【輸出錯誤】:-0.000000

在這裏插入圖片描述

二、 C++ double類型用 %f 格式輸出【輸出正確】

在這裏插入圖片描述

三、 C語言 double類型用 %lf 或 %f 格式輸出 【均輸出正確】

在這裏插入圖片描述
這讓我感到十分玄學,爲什麼第一種輸出就不對了呢,double類型爲什麼不能寫%lf輸出?
(編譯器選用 dev c++ 或者 vs code 在C++中按 %lf 輸出double類型均可正確輸出,而codeblocks 17.12選用C++會輸出0.000000)

原因

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

答:printf的%f說明符的確既可以輸出float型又可以輸出double型。 根據"默認參數提升"規則(在printf這樣的函數的可變參數列表中 ,不論作用域內有沒有原型,都適用這一規則)float型會被提升爲double型。因此printf()只會看到雙精度數。對於scanf,情況就完全不同了,它接受指針,這裏沒有類似的類型提升。(通過指針)向float存儲和向double存儲大不一樣,因此,scanf區別%f和%lf。

嚴格地講,%lf在printf下是未定義的,但是很多系統(或者其他編譯器)可能會接受它。要確保可移植性,就要堅持使用%f。總之,以後按 %f 輸出double類型吧!

參考文章:https://blog.csdn.net/sinat_14958547/article/details/37877405?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章