【发布时间】:2013-12-09 00:52:33
【问题描述】:
我正在尝试微调一个程序,该程序从 .txt 文件中获取一系列值,并创建 15 个值的运行平均值。例如,它将读取前 15 个值,在第 15 个数字旁边输出这个平均值,然后它将读取 2-16 值,取平均值并将其输出到第 16 个数字旁边。然后它将读取值 3-17,取平均值并将其输出到第 17 个数字旁边,依此类推。不幸的是,我的程序没有取得太大进展,但这是我目前拥有的代码:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <cmath>
#include <cstdlib>
#include <iomanip>
using namespace std;
#define ARRAYSIZE 10000
#define OTHER 10000
int main(void)
{
//things needed
ifstream infile;
ofstream outfile;
double xArray[ARRAYSIZE];
double yArray[ARRAYSIZE];
double average;
double sum = 0;
double sum2=0;
double average2;
infile.open("data.txt");
if (infile.fail()) {
cout << "can't open data.txt\n";
exit(1);
}
for (int z = 0; z < 15; z++) {
infile >> xArray[ARRAYSIZE];
sum = xArray[ARRAYSIZE] + sum;
average = sum / (z+1);
}
outfile << xArray[ARRAYSIZE] << ", " << average << endl;
sum2 = sum;
//Running Average
for (int x = 0; x < 10000 && !infile.eof(); x++) {
infile >> yArray[OTHER];
sum2 = yArray[OTHER] + sum2;
average2 = sum2 / (x + 16);
cout << yArray[OTHER] << ", " << average2 << endl;
}
}
如您所见,我可以得到所有内容的平均值,但我无法将平均值分成 15 个值段。
【问题讨论】:
-
您的索引
xArray[ARRAYSIZE]和yArray[OTHER]不正确。他们访问数组末尾的一个元素。实际上,您编写代码的方式根本不需要数组,因此您可能会重新考虑自己在做什么。如果您确实需要滑动窗口平均值,则需要对最后 15 个样本进行处理,但您只查看最近的样本。 -
@JoeZ 你能给我一个代码示例来说明你的意思吗?没有数组你会怎么做?
-
@HansPassant 切换 for 循环到底是什么意思?
-
我并不是说你可以在没有数组的情况下做到这一点。我是说您的代码没有使用它声明的数组,因为它总是在读取和写入相同的元素。这表明你做错了什么。
标签: c++ arrays average file-io