LF是什么意思啊?
float是浮點(diǎn)型,double是double float的意思,也就是雙精度浮點(diǎn)型。
%f是以float類型格式化輸入或輸出,%lf是long float的意思(估計(jì)是和%ld對應(yīng)),也就是指double類型。
scanf讀%f時(shí),系統(tǒng)會按照4字節(jié)長度來讀,讀完要放到一個4字節(jié)的空間位置,也就是一個float所在的位置。那么double有8字節(jié)空間,比4字節(jié)還大,能不能來放?答案是不能。因?yàn)閒loat和double的關(guān)系不像int和long的關(guān)系那樣,簡單的在后面增加4字節(jié)的位置。float和double有自己專門的數(shù)據(jù)排列格式,如下:
如果讀的時(shí)候明明是按照float的格式來讀,但是卻存在double的空間內(nèi),并且之后一直按double來操作,那么里面數(shù)據(jù)的符號位、階碼、尾數(shù)就全錯位了。除非你在用的時(shí)候把每個double強(qiáng)制轉(zhuǎn)換成float來用,但是何必多次一舉?
同理,如果讀用%lf來讀,卻存在float中,不僅格式錯位,而且存儲空間也不夠,會有數(shù)據(jù)丟失。
所以用scanf讀的時(shí)候,讀%f就規(guī)規(guī)矩矩的放進(jìn)float中來存,讀%lf就放進(jìn)double中,這樣在使用的時(shí)候里面的數(shù)據(jù)才不會錯位。
在printf的時(shí)候,首先C里面的float其實(shí)在使用過程中都是被隱式轉(zhuǎn)換成了double來用。所以你在printf時(shí)用float還是double其實(shí)是一樣的。用%f和%lf都可以。