0

doubleすべてをintに変更すると、なぜうまくいくのかわかりません。

printfステートメントに何か問題がありますか?

あなたが使う%f%lf、のためdoubleに、そうですか?

/*
double power(double a, int b) that calculates the power ab. You are allowed to use the
multiplication operator *.
*/
#include <stdio.h>
#include <conio.h>
double power(double a,int b)
{
    double buffer;
    if(b > 1)
    {
        buffer = a * power(a,b-1);
        return buffer;
    }
    else
        return a;
}
int main(void)
{
    double a;
    int b;
    int buffer;
    scanf("%f",&a);
    scanf("%d",&b);
    buffer = power(a,b);
    printf("%f",buffer);
    getch();
}
4

4 に答える 4

1
int buffer;
printf("%f",buffer);

printfで間違った指定子を使用しています。これは、printf引数を変換できないため、深刻な問題です。使用するか、ダブルに%d変更してください。buffer


2番目の問題として、はではなく、であるため、%lfの代わりに使用することもできます。%fscanfadoublefloat

于 2012-09-02T10:34:50.400 に答える
0
scanf("%f",&a);

あなたはによってあなたのダブルを読む必要があります%lf。を必要とするが、を必要としない理由については、この質問を参照してください。%lfscanfprintf

于 2012-09-02T10:33:40.297 に答える
0

問題は、システム上でintは、同じ長さであるように見えますが、そうでは floatないというdoubleことです-scanf()をdoubleにすると、半分が失われます(ちなみに、間違ったフォーマット指定子をscanfにフィードすることは未定義の動作です) 。%lfダブルスに使用する必要があります。

于 2012-09-02T10:34:02.357 に答える
0

%lfscanfでdoubleを使用する必要があります。この質問を参照してください。
代わりに:

scanf("%f",&a);

これを使って:

scanf("%lf",&a);

また、メイン関数では、バッファのタイプはであってはなりdoubleませんint

于 2012-09-02T10:34:54.413 に答える