【发布时间】:2016-07-21 12:37:44
【问题描述】:
我正在编写一个从 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。
提前感谢您的帮助!
【问题讨论】:
-
通过尝试以这种方式解析 XML,您将完成的唯一一件事是 http://thedailywtf.com 上的一篇专题文章。您需要使用适当的 XML 解析器库来解析 XML 文档。
-
如果这发生在我身上(而且我没有使用 XML 解析器),我会添加调试代码来观察从
myfile读取的每个单词。这会告诉我事情在哪里卡住了。 -
感谢您的回答!我实际上使用了一些“cout,然后是 1 1,然后达到
并且不再继续。 -
您可能需要检查
myfile.eof()以至少打破无限循环...myfile.fail()可以提示您流错误。
标签: c++ infinite-loop ifstream