[英]Using nested loops and fin correctly
我有一个关于在C ++中正确使用fin和循环的问题。 我从中读取了一个文件,该文件包含78行数据,包括滑雪胜地名称,海拔高度,然后是12个数字(每月降水量)。 该程序应该从该文件中读取,然后将名称,海拔和年平均降水量输出到另一个文件。 由于某种原因,我无法使平均值正常工作。 我必须为78条生产线的每一条运行一个循环,然后运行一个嵌套循环以处理12个月的每一条。
我还必须使用不知道放在哪里的cin.ignore。
码:
int main() {
ifstream fin("../Debug/monthlyPrecipitation.txt");
if (fin.fail())
{
cout << "Error opening file." << endl;
}
ofstream fout;
fout.open("../Debug/annualPrecipitation.txt", ios::app);
int elevation;
const int MONTHSPERYEAR = 12;
double average, precipTotal, precip;
string stationName;
fout << "Annual Precipitation Report" << endl;
fout << endl;
fout << "Weather Station" << setw(18) << "Elevation" << setw(12) << "Precipitation" << endl << endl;
for (int counter = 1; counter <= 78; ++counter)
{
getline(fin, stationName, '\t');
fin >> elevation;
for (int counter = 1; counter <= 12; ++counter)
{
fin >> precip;
precipTotal = precipTotal + precip; //the issue is here
}
average = precipTotal / MONTHSPERYEAR;
fout << stationName << setw(22) << elevation << setw(12) << average << endl;
}
谢谢。
除了污染precipTotal之外,您似乎忘了将线变成字符串流。 我假设您文件中的一行如下所示:
Resort_Name海拔precip1 precip2 ... precip12
如果您知道那条线,那么您将抓住所有的沉淀物,然后在内部循环中查找时,您将在下一行中阅读。 您需要做的是获得那条线,并将其转换为字符串流。 然后,将度假村名称读入一个不同的字符串中,将海拔高度读入一个int,然后计算平均值而不污染总数。
您无需在内部循环之前清除precipTotal,从而将给定测站的平均值污染了先前测站的结果。
您无需初始化所有POD变量,例如elevation
, average
, precipTotal
和precip
。
但是,只有precipTotal
会有问题,因为其他的在循环中都有新的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.