istringstream未输出正确的数据

istringstream not outputting correct data

本文关键字:数据 未输 输出 istringstream      更新时间:2023-10-16

在下面显示的while循环中,我很难让istringstream继续。数据文件也显示在下面。我使用输入文件中的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的内部声明声明了一个本地对象,当执行超出该块时,该对象将不存在,并且不会影响外部循环中使用的流。


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

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
    }
}