2017-07-26 8 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.54センチメートルです。そして私はあなたがその行に1000000で割るべきではないと思います。 – zwol

+2

'inch = Km * 25/1000000;' 'inches = centimeters * 2.54;' –

答えて

2

printf関数は、変数の値を書き込みます。アンパサンド演算子&は、値をポインタに変換します。これがエラーです。変数の実際の値を表示する代わりに、ポインタのアドレスメモリを表示しています。

printf関数のdocumentationを読んでください。 &*hereの詳細情報

1

の位置の変数を印刷しています。計算は正常ですが、実際には変数の値を表示していません。あなたはそれがどこにあるのかを記憶しています。

&オペレータは変数の位置を指定します。

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

:あなたは、これはすなわち、printfの文で& Sを除去することによって、あなたのプログラムを修正することができます。また

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

hereはかなり綿密printf()リファレンスへのリンクです。ポインタの詳細については、this pageを参照してください。

+0

"場所を印刷したい場合は、10進数または16進数のフォーマッタ(%dと%x"は助言が悪く、 '%d'はアドレスではなく' int'のためのものです。 'void *'を表示するには '%p'を使います。 – chux

関連する問題