移动平均计算中的未初始化变量

时间:2013-04-25 07:59:39

标签: c++ compiler-construction warnings moving-average

我想在下面的代码中尝试实现的是找到移动平均线;

int slots = int ((sr+e)/mst); // finding number of slots


int temp2;
int temp1;

if (temp1 == null) 
{
temp2 = 0;
}

temp2=temp1;   // previously found number of slots
temp1=slots;  // presently found number of slots
double mov_avg = (temp2+temp1)/2; //moving average

问题是当我编译时,我得到一个关于temp1未初始化的警告;在进行一项小型研究时,我发现变量在未初始化时不会在C ++中默认存储空值或零值;

我不能在代码中添加一行temp1 = 0,因为下一次迭代传递给temp2变量需要它的值;这两者都需要计算移动平均线。

所以,基本上这是第一次运行上述程序的问题;因为如果你通过它,上述逻辑就足以进行移动平均计算。你们觉得怎么样?

提前致谢。

1 个答案:

答案 0 :(得分:2)

最简单的解决方案是使用序列的第一个值初始化变量:

int prev = getValue();

while (valuesAvailable())
{
    int next = getValue();
    double moving_average = (prev + next) / 2.;
    // use moving_average
    prev = next;
}

请注意,我假设您的序列中至少有一个值:您可能需要在获取第一个值之前进行检查以确保它实际存在。