c变量似乎是打印地址而不是变量值

时间:2010-02-03 16:01:41

标签: c

#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的打印地址而不是值,它可能是一个语法错误。

6 个答案:

答案 0 :(得分: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 :(得分:3)

%d表示“十进制整数”。您使用的是double,而不是int。因此,请使用%lf中的scanf()%f中的printf()

答案 2 :(得分: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;
}

答案 3 :(得分:2)

您的第一个问题是double x = (f-32)*(5/9)5/9为零,因为您使用整数除法,因此x将为所有输入设置值0.0。对于浮点除法,请使用浮点数(如5.0/9.0)。

其次,%d用于打印整数。使用%f打印浮点值。

答案 4 :(得分:0)

添加其他人所说的,%d代表“十进制”(而不是%x是“十六进制”)

对于浮点数,或者在双精度浮点数的情况下,使用%f

答案 5 :(得分:0)

10次中的9次,当您使用printf显示调试数据并发现它显示bizzare结果时,您的printf电话中存在错误。

这就是我现在试图避免printf的原因。动态格式位是整洁的,但极端类型 - 不安全的呼叫使它经常成为错误的来源而不是启发。