#include<stdio.h>
main()
{
int fahr;
for(fahr = 300; fahr >= -40; fahr = fahr - 20)
printf("%3.d %8.d\n ",fahr,(5.0/9.0) * (fahr - 32.0));
}
它打印等效值,但都是錯誤的。爲什麼會發生?爲什麼它不打印華氏度和等值攝氏度的值從300到-40的相反順序?
#include<stdio.h>
main()
{
int fahr;
for(fahr = 300; fahr >= -40; fahr = fahr - 20)
printf("%3.d %8.d\n ",fahr,(5.0/9.0) * (fahr - 32.0));
}
它打印等效值,但都是錯誤的。爲什麼會發生?爲什麼它不打印華氏度和等值攝氏度的值從300到-40的相反順序?
轉換爲攝氏度的表達式使用double
類型的常量,因此表達式的類型爲double
。由於您使用%d
格式說明符的值爲double
,因此會出現未定義的行爲。
將第二個格式說明符更改爲%8.f
,您將得到預期的輸出。另外,將第一個格式說明符更改爲%3.1d
,這樣當fahr
爲0
時,它將打印該值而不是空白。
printf("%3.1d %8.f\n ",fahr,(5.0/9.0) * (fahr - 32.0));
''%3.1d''很好的結果。 – chux
因爲你試圖使用double,你需要使用float。試試這個:
#include<stdio.h>
main()
{
int fahr;
for(fahr = 300; fahr >= -40; fahr = fahr - 20)
printf("%3.d %8.f\n ",fahr,((fahr - 32) * .5556));
}
這個答案的代碼並沒有像「你需要使用float」那樣在任何地方使用'float'。 – chux
'%8.d'應該是'%8.f',因爲你打印的浮點值,而不是整數的人 –
你混'int'和'floats',你用錯了格式說明符'%d'而不是'%f'。 –