代码非常简单,我存储最后 10 个值并输出平均值。 但是,数组的 0 元素保持不变,初始值为“0”。
long int avg[10] = {0,0,0,0,0,0,0,0,0,0};
int i;
float temp2;
for (i=0;i<9;i++){
avg[i] = avg[i+1]; //shift all values to the left
}
avg[9] = temp2; //temp2 is the last value
temp2 = 0; //i am reusing temp2 as mean result
for (i=0;i<10;i++){
temp2 += avg[i];
}
temp2 /= 10;
通过将结果除以 9,该值得到纠正,但这纯粹是一种解决方法,我想知道为什么会发生这种情况。
谢谢
编辑:
假设我的 adc 读取的值接近 250。 在第一次运行中,值从右到左添加到数组中:
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 251
0 0 0 0 0 0 0 0 251 252
0 0 0 0 0 0 0 251 252 248
等等
虽然经过多次运行后,值应该填满表格,但表格始终具有以下形式:
0 251 252 248 250 247 253 252 248 247
我希望我说得更清楚
--编辑2:
你为什么对我的问题投反对票?是因为你不明白吗? 哪个严肃的编译器会编译它而不出现错误/警告我没有初始化 temp2 以及由于这个原因出现这个问题的概率到底是多少?
最佳答案
您尚未初始化int temp2
。这就是为什么你会得到这样的结果。
int temp2 = 0;
avg[9] = temp2;
关于C 不解析数组第一个元素 - AVR GCC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27089252/