我在用scanf函式的時候,double型別的格式符我一直認為%f和%lf一樣的效果呢。
下面我是我測驗的一段代碼:

如果用%f的話,則輸入的數值不對;

如果scanf函式用%lf,結果就是對的;

這是為什么呢?我看別的回答,double型別都讓用%f就行。
我使用的編譯器是DEVC++ 5.11.
uj5u.com熱心網友回復:
double輸入的是8位元組的,float是4位元組的。輸出用%f沒問題,可能是型別提升了。uj5u.com熱心網友回復:
既然測驗了,驗證了,那說明別人說的可能局限于編譯器,要么就是別人說的有問題~uj5u.com熱心網友回復:
雖然都是浮點數,%f代表單精度浮點型資料(float),%lf代表雙精度浮點型資料(double),怎么可能一樣呢。單精度浮點數有效數字保證6位,部分7位,雙精度浮點數有效數字保證15位,部分16位。單精度浮點的表示范圍:-3.40E+38 ~ +3.40E+38,雙精度浮點的表示范圍:-1.79E+308 ~ +1.79E+308
uj5u.com熱心網友回復:
你定義的double,scanf就得用lf,浮點數本就很麻煩,看堆疊除錯uj5u.com熱心網友回復:
https://blog.csdn.net/weixin_44997886/article/details/102812153參考
uj5u.com熱心網友回復:
#include <stdio.h>
int main() {
float f=1.234567f;
double lf=1.234567890123456;
printf("%f ,%.15lf\n",f,lf);//1.234567 ,1.234567890123456
printf("%f ,%.15f \n",f,lf);//1.234567 ,1.234567890123456
printf("%lf,%.15lf\n",f,lf);//1.234567,1.234567890123456
char s[]="1.234567890123456";
f =0.0f;sscanf(s,"%f" ,& f); printf("%f \n", f);//1.234568
lf=0.0 ;sscanf(s,"%lf",&lf); printf("%.15lf\n",lf);//1.234567890123456
lf=0.0f;sscanf(s,"%f" ,&lf); printf("%.15lf\n",lf);//0.000000000000000
f =0.0 ;sscanf(s,"%lf",& f); printf("%f \n", f);//70.175720
return 0;
}
//根據以上運行結果可得:printf時,%lf和%f可以混用,scanf時不行。
uj5u.com熱心網友回復:
double就是要使用 %lf的float使用 %f
不要糾結為什么。
想想double使用 %d能對嗎?
你現在的問題就 類似 “ double型別變數,使用scanf函式時格式符%d,為什么錯誤了?”
沒有為什么,就是用錯了
uj5u.com熱心網友回復:
%f是float單精度,%lf是double雙精度的,所以計算結果不同轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/263935.html
標籤:C語言
上一篇:各類資料庫連接池
