C++ Ifstream卡在一个单词上,创建了一个无限循环
我正在编写一个从txt文件收集数据的代码。为了获得下一个有趣的数字,我使用了do-while循环。然而,第一个do while循环工作得很好,但是在第二个循环中,ifstream myfile被单词Pmax卡住了。不知道原因是什么=/ 下面是解析器的有趣部分(我不使用XML,尽管它看起来有点像):C++ Ifstream卡在一个单词上,创建了一个无限循环,c++,infinite-loop,ifstream,C++,Infinite Loop,Ifstream,我正在编写一个从txt文件收集数据的代码。为了获得下一个有趣的数字,我使用了do-while循环。然而,第一个do while循环工作得很好,但是在第二个循环中,ifstream myfile被单词Pmax卡住了。不知道原因是什么=/ 下面是解析器的有趣部分(我不使用XML,尽管它看起来有点像): ifstreammyfile; 字符串注释; 常量字符串filename=“data”; 打开(filename.c_str()); 做{ 我的文件>>评论; }而(评论!=”); 对于(int i=
ifstreammyfile;
字符串注释;
常量字符串filename=“data”;
打开(filename.c_str());
做{
我的文件>>评论;
}而(评论!=”);
对于(int i=0;i>注释;
双prov;
myfile>>prov;
问题推回(prov);
}
做{
if(myfile.eof()){coutcomment;
双prov;
myfile>>prov;
Pmax.推回(prov);
}
下面是我想读的txt文件的一部分:
<probScen> scenario s - happening probability </probScen>
1 1
<Pmax> hour h - max price for this hour </Pmax>
1 5
场景s-发生概率
1 1
小时h-本小时的最高价格
1 5
第一个do while循环可以很好地处理probScen,但第二个do while中的myfile会被Pmax卡住,从而创建一个无限循环。更准确地说,myfile会读取每一个单词,直到/probScen,然后是1,1,Pmax,但不再继续。myfile.eof()永远不会返回true
提前感谢您的帮助!
当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
}
for(int i=0;i>注释;//消耗1
双prov;
myfile>>prov;//消耗1
问题推回(prov);
}
第二次迭代:
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
}
for(int i=0;i>注释;//消耗
双prov;
myfile>>prov;//试图解析“hour”,但失败!
//从现在起,设置失败位
probsen.push_back(prov);//存储未初始化的值
}
在下面的while循环中,由于设置了fail位,因此不会读取任何内容,因此注释将保留在最新使用的“…尝试以这种方式解析XML所能完成的唯一一件事是上的一篇专题文章。您需要使用适当的XML解析器库来解析XML文档。如果这发生在我身上(我没有使用XML解析器),我会添加调试代码来观察从
myfile
读取的每个单词。这会告诉我哪里出了问题。看看谢谢你的回答!我实际上使用了一些“coutYou可能想检查myfile.eof()
来打破无限循环,至少…myfile.fail()
可以提示您流出现错误。非常感谢,您救了我!我确定numberScen设置为1,但实际上不是。这现在完全有道理了。