我正在编写一个从txt文件中收集数据的代码。为了得到下一个有趣的数字,我使用了一个do-while循环。但是,第一个do-while循环完美地工作,但在第二个循环中,ifstream myfile卡在单词Pmax上。不知道原因是什么。 = /
以下是解析器的有趣部分(即使看起来有点像我也不使用XML):
ifstream myfile;
string comment;
const string filename = "data";
myfile.open(filename.c_str());
do{
myfile>>comment;
} while (comment != "</probScen>");
for (int i=0;i<numberScen;i++){
myfile>>comment;
double prov;
myfile>>prov;
probScen.push_back(prov);
}
do{
if(myfile.eof()){cout<<"EoF reached"<<endl;}
myfile>>comment;
} while (comment != "</Pmax>");
for (int i=0;i<H;i++){
myfile>>comment;
double prov;
myfile>>prov;
Pmax.push_back(prov);
}
这是我想要阅读的txt文件的一部分:
<probScen> scenario s - happening probability </probScen>
1 1
<Pmax> hour h - max price for this hour </Pmax>
1 5
第一个do-while循环处理probScen很好,但第二个do-while中的myfile卡在Pmax上,因此创建了一个无限循环。更确切地说,myfile读取每个单词,直到/ probScen,然后是1,1,Pmax,但之后不再继续。 myfile.eof()永远不会返回true。
提前感谢您的帮助!
答案 0 :(得分:1)
一旦numberScen大于1(一),就会出现问题!
第一次迭代:
for (int i = 0; i < numberScen; i++)
{
myfile>>comment; // consumes 1
double prov;
myfile>>prov; // consumes 1
probScen.push_back(prov);
}
第二次迭代:
for (int i = 0; i < numberScen; i++)
{
myfile>>comment; // consumes <Pmax>
double prov;
myfile>>prov; // trying to parse 'hour', but fails!
// from now on, fail bit is set
probScen.push_back(prov); // stores uninitialized value
}
在下面的while循环中,当设置了失败位时,根本不会读取任何内容,因此注释仍保留在最近消耗的&#34;&#34; ...