使用scanf计算从用户输入提升到的功率数,

时间:2017-12-01 13:18:50

标签: c++ segmentation-fault scanf

所以我试图使用scanf计算从用户输入提升到的功率数,但我继续得到分段错误。任何人都知道为什么?这是我的代码:

int power( int base, int exponent){   
    int total=1;
    int temp = power(base, exponent/2);
    if (exponent == 0)
         return total;  // base case;

    if (exponent % 2 == 0)// if even
         total=  temp * temp;
         return total;
    if(exponent %2 !=0)// if odd
         total =(base * temp * temp);
         return total;
}

void get_info(){
    int base, exponent;
    printf("Enter a base number: ");
    scanf("%d", &base);
    printf("Enter an exponent: ");
    scanf("%d", &exponent);
    //call the power function
    printf("%d",power(base,exponent));

}

int main(){
    //call get_info
    get_info();
    return 0;
}

非常感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:2)

power中无法阻止递归:

int power( int base, int exponent){   
    int total=1;
    int temp = power(base, exponent/2); // round and round we go

解决方案是

if (exponent == 0)
     return total;  // base case;

在函数的顶部。 C ++运行时库经常在堆栈溢出上发出误导性的终止消息,例如这个。

我也很想使用else而不是明确地测试奇数情况。并修复了一些缺失{}

的明显问题