功能错误的值

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 ...
奇怪的是,我在一个文件中编写了这个函数并且工作正常,但它绝对应该兼顾两种方式

知道为什么会这样吗?

Mic*_*urr 6

你有没有

#include "power.h"
Run Code Online (Sandbox Code Playgroud)

在顶部power.c

如果没有,编译器不知道get_power()调用点的原型是什么,所以它将诉诸于将第一个参数提升为a double而不是将其作为a传递float.它也会错误地假设结果是int而不是float返回的结果.

如果编译器在调用之前看到原型,那么事情会更好.

  • 是.我发现最好只使用警卫. (2认同)