0

我不明白为什么如果你把所有的都double改成,它工作得很好int

我的 printf 语句有问题吗?

您使用%for%lfdouble吗?

/*
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为双。


作为第二个问题,您还需要使用%lf而不是%fin scanf,因为a是 a double,而不是 a float

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

你需要阅读你的双倍%lf。请参阅此问题,了解为什么需要%lfwithscanf但不需要 with printf

于 2012-09-02T10:33:40.297 回答
0

问题是,在您的系统上,int它的长度似乎与 float但不一样double- 当您 scanf() 一个 double 时,您会丢失它的一半(顺便说一下,向 scanf 提供错误的格式说明符是未定义的行为) . 你必须使用%lf双打。

于 2012-09-02T10:34:02.357 回答
0

你应该%lf在 scanf 中使用 for double 查看这个问题。
代替:

scanf("%f",&a);

用这个:

scanf("%lf",&a);

double同样在 main 函数中,缓冲区的类型不应该是int.

于 2012-09-02T10:34:54.413 回答