可变缓冲区?

时间:2016-04-20 06:22:42

标签: c variables initialization

我有这个代码来计算一个值的指数幂,两者都是由用户输入的,例如,用户输入2 ^ 3 = 8,它假设这样工作但是有些错误,最终结果是608 ,当我在计数器中的pwra函数中调试时,甚至在计数器启动之前设置结果值,从那里我不知道因为我没有设置它所以最终结果是608.我觉得它是缓冲区问题但是我我试过fflush进出,它不起作用。因此,当我将此代码复制到一个新窗口时,它会工作一段时间,然后再次相同,之前它会显示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的指数值,因为当我将所有int更改为float时,即使使用{{1},最终结果始终为0.00000 }。

1 个答案:

答案 0 :(得分:6)

您正在点击undefined behavior下面的行

 result = result*num;

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

始终初始化您的本地变量,例如

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

接下来,您希望将所有int更改为float,只更改变量的数据类型是不够的。您还需要更改相应的格式说明符。