Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Ifstream卡在一个单词上,创建了一个无限循环_C++_Infinite Loop_Ifstream - Fatal编程技术网

C++ Ifstream卡在一个单词上,创建了一个无限循环

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=

我正在编写一个从txt文件收集数据的代码。为了获得下一个有趣的数字,我使用了do-while循环。然而,第一个do while循环工作得很好,但是在第二个循环中,ifstream myfile被单词Pmax卡住了。不知道原因是什么=/

下面是解析器的有趣部分(我不使用XML,尽管它看起来有点像):

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,但实际上不是。这现在完全有道理了。