如果您将所有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();
}
答案 0 :(得分:1)
int buffer; printf("%f",buffer);
你在printf中使用了错误的说明符,这是一个严重的问题,因为printf
无法转换参数。使用%d
或将buffer
更改为双精度。
作为第二个问题,您还希望在%lf
中使用%f
代替scanf
,因为a
是double
,而不是float
{{1}}。
答案 1 :(得分:0)
scanf("%f",&a);
您需要按%lf
阅读双倍内容。请参阅this question,了解%lf
scanf
与printf
{{1}}但不是{{1}}的原因。
答案 2 :(得分:0)
问题是,在您的系统上,int
似乎与float
的长度相同,但不是double
- 当您扫描f()一个双倍时,您松散了一半它(顺便说一句,为scanf提供错误的格式说明符是未定义的行为)。您必须使用%lf
进行双打。
答案 3 :(得分:0)
你应该在扫描时使用%lf
加倍{f}请参阅this问题
取代:
scanf("%f",&a);
使用它:
scanf("%lf",&a);
同样在main函数中,缓冲区的类型应为double
而不是int
。