0

我对多图有疑问。我读了一个文件,其中存储了每个月的年份和温度。

2011 年 9.23 3.23 4.23 等等。

现在我想将每年的平均温度写回一个文件。

我使用了多图。双重存储我的平均温度,并从我的班级 Year 我调用 getYear() 方法来获取适合平均温度的年份。

我需要多图,因为有相同的平均温度。

但是,如果我现在查看输出文件,我会发现 2011 年是两倍,平均温度相同。

在输入文件中,Year 2011 只写了一次。

我是否两次获得相同的年份,因为它位于输入文件的和?那么问题可能来自于读取最后一行的文件?

这是 outpuf 文件的外观:

1994 9.7025

2011 9.635

2011 9.635

2002 9.55667

我的 stringsteam ohneKomma 存储输入文件。

while(ohneKomma)    
{  
    Year year;
    ohneKomma >> _jahr;
    year.setJahr(_jahr);

    ohneKomma >> _d1;
    ohneKomma >> _d2;
    ohneKomma >> _d3;
     //and so on....

    year.setAvgTemps(_d1, _d2, _d3, _d4, _d5, _d6, _d7, _d8, _d9, _d10, _d11, _d12);

    map2.insert(make_pair(year.getMittelwert(), year));//fallend
    ;
}

我希望你们能帮助我并对我的英语不好感到抱歉,但我希望你们明白我的意思:)

谢谢

4

3 回答 3

1

更改代码以检查输入是否成功作为while条件:

while(ohneKomma >> jahr >> _d1 >> d2 ....)    
{  
    Year year;
    year.setJahr(_jahr);


    year.setAvgTemps(_d1, _d2, _d3, _d4, _d5, _d6, _d7, _d8, _d9, _d10, _d11, _d12);

    map2.insert(make_pair(year.getMittelwert(), year));//fallend
}
于 2013-07-03T12:54:20.787 回答
0

在您尝试在流结束时读取之前,流不会失败。您需要在第一次读取操作后检查流状态。

while(ohneKomma)    
{  
    Year year;
    ohneKomma >> _jahr;
    if(!ohneKomma)
        break;
    year.setJahr(_jahr);

    // ...
}
于 2013-07-03T12:51:30.237 回答
0

像这样修改代码。它会做同样的事情,但会更好。

while(ohneKomma >> _jahr)   //change here.  
{  
    Year year;
    year.setJahr(_jahr);   //note the modification here too.

    ohneKomma >> _d1;
    ohneKomma >> _d2;
    ohneKomma >> _d3;
     //and so on....

    year.setAvgTemps(_d1, _d2, _d3, _d4, _d5, _d6, _d7, _d8, _d9, _d10, _d11, _d12);

    map2.insert(make_pair(year.getMittelwert(), year));//fallend
    ;
}

这是读取文件的正确方法,不会遇到奇怪的 EOF 错误。

于 2013-07-03T12:56:28.837 回答