2017-07-26 79 views
-7

我是c新手,请帮忙,这个答案总是零。为什么?而不是将KM转换为米或厘米(对于错别字)。这个c代码有什么问题?答案始终为零?

#include <stdio.h> 

int main() 
{ 
    float Km; 
    float metres; 
    float inches; 
    float centimetres; 

    printf("Welcome, please enter the distance in Km.\n"); 

    scanf("%f", &Km); 
    metres = Km * 1000; 
    centimetres = Km*100000; 
    inches = Km*25/1000000; 

    printf("Distance In Metres is:\n"); 
    printf("%f\n", &metres); 

    printf("Distance in Centimeters is:\n"); 
    printf("%f\n", &centimetres); 

    printf("Distance in Inches is:\n"); 
    printf("%f\n", &inches); 

    printf("bye\n"); 

    return 0; 
} 
+5

为什么要将变量的地址发送到printf语句> –

+2

英寸恰好是2.54厘米,而不是2.5英寸。而且我认为你不应该把这个数字除以1000000。 – zwol

+2

Aside'inches = Km * 25/1000000;'better as'inches = centimeters * 2.54;' –

回答

2

printf函数写入变量的值。和号运算符&将您的值转换为指针,这就是错误。不是打印变量的实际值,而是打印指针的地址内存。

阅读关于printf函数的documentation。有关&*here的更多信息。

1

您正在打印位置的变量。计算很好,但实际上并没有打印变量的值。您正在打印它在内存中的位置。

&运算符将给出变量的位置。您可以通过在printf语句去掉& S,修改你的程序,即这样的:

printf("%f\n", &inches); 

变为:

printf("%f\n", inches); 

此外,here是一个非常深入的printf()参考的链接;要了解更多关于指针的信息,可以去this page

+0

“如果要打印位置,...,请使用十进制或十六进制格式化程序(%d和%x”是不好的建议并且会损害良好的答案 - 建议删除'%d'代表'int',不代表地址,要打印'void *',请使用'%p'。 – chux