2010-02-03 268 views
1
#include <stdio.h> 
#include <stdlib.h> 

int main (void) 
{ 
double f; 

printf ("What is the temperature in Fahrenheit?\n"); 
scanf ("%d", &f); 

double x = (f-32)*(5/9); 
printf ("%d degrees Fahrenheit \n",f); 
printf ("%d degrees Celsius",x); 
system("PAUSE"); 

return 0; 
} 

f似乎是變量f的打印地址而不是值,它可能是一個語法錯誤。c變量似乎是打印地址而不是變量值

+0

請參閱* http://stackoverflow.com/questions/210590/why-does-scanf-need-lf-for-doubles-when-printf-is-okay-with-just-f*關於使用* * scanf()**和** printf()**雙打 – jschmier 2010-02-03 16:15:18

+0

5/9 == 0; 5.0/9.0是你想使用的。 – 2010-02-03 16:26:38

回答

7

%d應爲%F:

printf ("%f degrees Farenheit \n",f); 
printf ("%f degress Celsius",x); 

編輯:喬納森指出的,你需要改變:

double x = (f-32)*(5/9); 

double x = (f-32)*(5.0/9); 

在C,整數除法(分紅和除數都是整數類型的分部)截斷,所以5/9總是0.

+1

將「%f」用於float和double;像printf這樣的variadic 函數的float參數會自動提升爲double。 – jschmier 2010-02-03 16:07:16

+0

+1。 %f應該這樣做。 http://www.thinkage.ca/english/gcos/expl/c/lib/printf.html – codaddict 2010-02-03 16:10:09

+1

這是問題的一個主要部分 - 這不是全部問題。另一個問題是5/9 == 0問題。 – 2010-02-03 16:30:54

0

添加到其他人所說,%d代表「十進制」(而不是%x是「十六進制」)

浮點數,或在您的情況下雙精度浮點數,使用%f

3

%d表示「十進制整數」。您正在使用double s,而不是int s。因此在printf()scanf()%f中使用%lf

2

嘗試......

#include <stdio.h> 
//#include <stdlib.h> 

int main (void) 
{ 
float c; 
float f; 

printf ("What is the temperature in Fahrenheit?\n"); 
scanf ("%f", &f); 

c = (f-32)*(5.0/9.0); 
printf ("%f degrees Fahrenheit \n",f); 
printf ("%f degrees Celsius \n",c); 
system("PAUSE"); 

return 0; 
} 
+1

如果實際包含則更好 - 它聲明'system()'。 – 2010-02-03 16:28:13

0

9次了10年,當您使用printf顯示調試數據,發現其顯示效果的bizzare,你有你的電話printf錯誤。

這就是爲什麼我現在試圖避免printf。動態格式位是整齊的,但是調用的極端類型 - 不安全性使其經常成爲錯誤的源頭,而不是顯而易見的。

+0

給自己一個編譯器,告訴你什麼時候犯錯誤 - 並且學習規則,這樣你就不會犯錯誤。 – 2010-02-03 16:29:55

2

你的第一個問題是double x = (f-32)*(5/9)5/9爲零,因爲您正在使用整數除法,所以x對於所有輸入將具有值0.0。對於浮點除法,使用浮點數(如5.0/9.0)。

二,%d用於打印整數。使用%f來打印浮點值。