我设计了一个程序,用于从包含实时更新气象中心信息的CSV文件中读取数据。
我现在正在将某些职责分解为功能,我需要打印平均风速和功能。指定年份每个月的辐射。 样本输入: {年} 2016
示例输出: {月,平均风速,平均辐射} 1月,5.5,196.4 二月,4.4,200.3 ... 等
我的程序被设置为“WindData”的向量,其包含不同的类,例如“日期”,“时间”和“时间”。风速数据。
以下功能是我遇到的问题:
void averageWind(int yearNum, std::vector<WindData>& windlog)
{
std::string month[12] = {"January", "February", "March", "April", "May", "June",
"July", "September", "October", "November", "December"};
int monthCount = 0, monthNum[12] = {0}, monthAverage[12] = {0};
int dayCount[12] = {0}, totalWindSpeed[12] = {0}, totalRadiation[12] = {0}, mWindAverage[12] = {0};
std::vector<WindData>::iterator iter;
for(iter = windlog.begin(); iter != windlog.end(); iter++)
{
if(iter->getYear() == yearNum)
{
for(int i = 0; i < 12; i++)
{
while((iter->getMonth()-1) == i)
{
dayCount[i]++;
totalWindSpeed[i] += iter->getSpeed();
}
std::cout << "Wind Speed: " << totalWindSpeed[i] << std::endl;
std::cout << "Day Count: " << dayCount[i] << std::endl;
mWindAverage[i] = (totalWindSpeed[i] / dayCount[i]);
//std::cout << mWindAverage[i];
//std::cout << month[i];
}
}
}
}
这显然不完整,打印方法仅用于测试目的,我的问题是totalWindSpeed和dayCount都产生0。 我试图调试代码以确定它出错的地方,似乎迭代器本身存在问题,但是当我在我的主函数中使用它时,这种方法有效。
错误如下:
编程接收信号SIGSEGV,分段故障。
可能导致这种情况的原因是什么?我已经阅读了关于引用迭代器等的内容,但是从我可以告诉它的设置是正确的。
答案 0 :(得分:1)
如果没有其他信息,我会做这样的事情。
for (WindData& windData : windlog) {
if (windData.getYear() == yearNum) {
int i = windData.getMonth() - 1;
totalWindSpeed[i] += windData.getSpeed();
dayCount[i]++;
}
}
for (int i = 0; i < 12; i++) {
// If each month appears only once, this may go into the previous loop.
mWindAverate[i] = totalWindSpeed[i] / dayCount[i];
}
答案 1 :(得分:1)
你的第一个问题是:
mWindAverage[i] = (totalWindSpeed[i] / dayCount[i]);
对于i dayCount [i]的大多数值为零。我希望你的分段错误来自这里。你应该首先测试除以的值不是零。
第二个问题是这个
for(int i = 0; i < 12; i++)
您不必再重复几个月。使用迭代器读取数据时,只需添加到正确的月份。请参阅上面的其他答案(不测试0除以!!)。你的代码变得无聊复杂。