2016-04-15 15 views
-3

私はこのコードをコンパイルするためにBloodshed DevC++を使用します。 しかし、私はscanf float番号に問題があります。 そして、私は小数点以下の型を取得したくありませんが、結果はfloat型でなければなりません 結果は常に0.000000になります。C++ float scanf入力番号

#include <stdio.h> 

main() 

{ 
    float A, B, C; 
    B = 3.14; 

    C = (4*B*A*A); 

    printf (" Enter value of A : "); scanf("%f", &A); 
    printf ("\n"); 
    printf (" So, the result is : %f", C); 
    printf ("\n"); 
} 

そして結果は次のとおりです:

これはコードです Float.jpg

Enter value of A : 22.45 

So, the result is : 0.000000 

-------------------------------- 
Process exited after 7.235 seconds with return value 0 
Press any key to continue . . . 

誰も私を助けている場合それは良いだろう、感謝:)

+2

したがって、コンピュータは神秘的で、あなたがそれを入力する前に 'A'を知っているので、' C =(4 * B * A * A); 'C'の値を知る; –

+1

' A'は未初期化 –

+1

PS:戻り値を 'scanf'から確認してください –

答えて

1

あなたがC = (4*B*A*A);を行い、これは、Cとなることを意味するものではありません。常にには式はに評価されます。これは、その時点でその式の値に基づいてCを変更していることを意味します。

したがって、この時点以降のAを変更しても、Cの値には影響しません。 Aは初期化されていないため、結果はundefined behaviorとなります。結果は必ずしも予測できないことを意味します。あなたが最初Aの値に読む必要が

そしてABの現在の値に基づいてCを変更します。

printf (" Enter value of A : "); scanf("%f", &A); 
C = (4*B*A*A); 
printf ("\n"); 
printf (" So, the result is : %f", C); 
printf ("\n"); 

あなたかかわらず、あなたの元のコードはどうなるのか行うには、あなたはそれを呼び出すときにCの値を計算する関数を定義する必要があります。

#include <stdio.h> 

int C(int A, int B) 
{ 
    return 4*B*A*A; 
} 

int main() 
{ 
    float A, B; 
    B = 3.14; 

    printf (" Enter value of A : "); scanf("%f", &A); 
    printf ("\n"); 
    printf (" So, the result is : %f", C(A,B)); 
    printf ("\n"); 
} 
0

あなたが入力を求める前に、「結果」を計算している:、

float A, B, C; 
B = 3.14; 

C = (4*B*A*A); // What value has A here? Probably 0 !! 

printf (" Enter value of A : "); scanf("%f", &A); // This has no influence 
                // whatsoever on the 
                // value of C 
printf ("\n"); 
printf (" So, the result is : %f", C); 
printf ("\n"); 

は、私はC(質問は前にC++をタグ付けされた)についてはよく分からないが、私はA0に初期化されると思います結果は実際には正確に0です。

PS:種類コンパイラは警告を出します。「警告:変数Aは初期化されていません」というようなものです。