2016-04-20 82 views
-2

我有这样的代码,其计算值的指数功率,这两者是由用户,例如输入,用户输入2^3 = 8,其假设像这样工作,但,最终的结果是608出头错误,当我在计数器中的pwra函数中进行调试时,即使在计数器初始化结果值被设置之前,从我不知道的地方开始,因为我没有设置它,所以最终结果是608。我觉得它是一个缓冲区问题,但我有尝试了进出口,它不起作用。所以当我将这段代码复制到一个新窗口时,它会在一段时间内运行,然后再次显示,之前它显示624作为最终结果。可变缓冲区?

#include <stdio.h> 
int pwra (int, int); 

int main() 
{ 
    int number, power, xx; 
    printf("Enter Number: "); 
    scanf("%i", &number); 

    printf("Enter Number: "); 
    scanf("%i", &power); 

    xx=pwra (number,power); 
    printf("Result: %i", xx); 

    return 0; 
} 

int pwra (int num, int pwr) 
{ 
    int count, result; 

    for(count=1;count<=pwr;count++) 
    { 
     result = result*num; 
    } 
    return result; 
} 

另一件事,我怎样才能从float计算的指数值,因为当我改变所有的intfloat最终的结果总是0.00000甚至%lf

+1

至于你的浮点问题,除了什么Sourav戈什回答,您使用的'float'或'double'?虽然'printf'并不重要,当您使用['scanf'](http://en.cppreference.com/w/c/io/fscanf)时,格式规范和类型很重要:''%lf“ ''是'double',''%f''是'float'。 –

+0

OK,感谢球员,似乎是在一个软件编译器问题,当我改变了软件的做工精细,启动了在它的两个工作后,无论如何,但是浮动的事情并没有在任何工作,最终的结果是0.00000。我改变了整数倍,并浮动以及,没有工作..我确实得到了一个-1.NANO作为答案,但在此之后什么都没有,仍然0.00000。为了澄清我想要做的是让用户输入值和指数作为浮点数,最终结果肯定会很长,因此最终结果必须长双倍,如lf .. – TryllZ

+1

无论如何问题你有,这不是一个编译器问题。 Sourav Ghosh回答了主要问题,现在如果你有浮点数问题,你应该发表关于它的另一个问题,显示新的代码(使用浮点数据类型和格式),我们将很乐意帮助你。 –

回答

6

你打undefined behavior为低于线

result = result*num; 

因为你没有初始化result。未初始化的自动局部变量的初始值是不确定的。使用它调用UB。

总是初始化局部变量,像

int count = 0 , result = 0 ; //0 is for illustration, use any value, but do use 

然后来要改变所有int s到float,只改变了变量的数据类型的情况下,是不够的。您也需要更改相应的格式说明符。

+1

在他的情况下,'result'需要初始化为1 –

+0

@ AimanAl-Eryani是的,同样的。 –

+0

'count'在'for'环...... –