fra*_*kie 3 c visual-studio-2010
所以我在C中有这个功能来计算功率,我正在使用visual c ++ 2010
power.h
void power();
float get_power(float a, int n);
Run Code Online (Sandbox Code Playgroud)
电能.C
void power()
{
float a, r;
int n;
printf("-POWER-\n");
printf("The base: ");
scanf("%f", &a);
n = -1;
while (n < 0)
{
printf("The power: ");
scanf("%d", &n);
if (n < 0)
{
printf("Power must be equal or larger than 0!\n");
}
else
{
r = get_power(a, n);
printf("%.2f ^ %d = %.2f", a, n, r);
}
};
}
float get_power(float a, int n)
{
if (n == 0)
{
return 1;
}
return a * get_power(a, n-1);
}
Run Code Online (Sandbox Code Playgroud)
不是最好的方法,我知道,但是
当我调试它时,不正确地扫描值(也就是说,值直到函数调用之前是正确的)但是在进入函数时a变为0和n成为1074790400,你可以猜到接下来会发生什么......
第一个函数是从主文件中调用的,我包含了完整的代码,因为我真的不知道会发生什么,我甚至无法思考如何google for it ...
奇怪的是,我在一个文件中编写了这个函数并且工作正常,但它绝对应该兼顾两种方式
知道为什么会这样吗?
你有没有
#include "power.h"
Run Code Online (Sandbox Code Playgroud)
在顶部power.c?
如果没有,编译器不知道get_power()调用点的原型是什么,所以它将诉诸于将第一个参数提升为a double而不是将其作为a传递float.它也会错误地假设结果是int而不是float返回的结果.
如果编译器在调用之前看到原型,那么事情会更好.
| 归档时间: |
|
| 查看次数: |
895 次 |
| 最近记录: |