gpt4 book ai didi

c++ - istringstream 没有输出正确的数据

转载 作者:行者123 更新时间:2023-11-28 07:13:57 25 4
gpt4 key购买 nike

我无法让 istringstream 在如下所示的 while 循环中继续。数据文件也如下所示。我使用输入文件中的 getline 获取第一行并将其放入 istringstream lineStream 中。它通过 while 循环一次,然后读取第二行并返回到循环的开头并退出而不是继续循环。我不知道为什么,如果有人可以提供帮助,我将不胜感激。编辑:我有这个 while 循环条件的原因是因为文件可能包含错误数据行。因此,我想确保我正在读取的行在数据文件中具有如下所示的正确格式。

while(lineStream >> id >> safety){//keeps scanning in xsections until there is no more xsection IDs

while(lineStream >> concname){//scan in name of xsection
xname = xname + " " +concname;
}


getline(InputFile, inputline);//go to next xsection line
if(InputFile.good()){
//make inputline into istringstream
istringstream lineStream(inputline);
if(lineStream.fail()){
return false;
}
}
}

数据文件

4   0.2  speedway and mountain
7 0.4 mountain and lee
6 0.5 mountain and santa

最佳答案

在给出的代码中,......

while(lineStream >> id >> safety){//keeps scanning in xsections until there is no more xsection IDs

while(lineStream >> concname){//scan in name of xsection
xname = xname + " " +concname;
}

getline(InputFile, inputline);//go to next xsection line
if(InputFile.good()){
//make inputline into istringstream
istringstream lineStream(inputline);
if(lineStream.fail()){
return false;
}
}
}

lineStream 的内部声明声明了一个本地对象,当执行超出该 block 时,该对象将不复存在,并且不会影响外部循环中使用的流。


一个可能的解决方法是稍微反转代码,如下所示:

while( getline(InputFile, inputline) )
{
istringstream lineStream(inputline);

if(lineStream >> id >> safety)
{
while(lineStream >> concname)
{
xname = xname + " " +concname;
}
// Do something with the collected info for this line
}
}

关于c++ - istringstream 没有输出正确的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20537375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com