无法输出我的整个文件,inputFile.eof()过早退出

问题描述 投票:-1回答:1
if(inputFile.is_open()){
        while(!inputFile.eof()){
            getline(inputFile, line);
            ss << line;
                while(ss){
                ss >> key;
                cout << key << " ";
                lineSet.insert(lineNumber);
                concordance[key] = lineSet;
            }
            lineNumber++;
        }   
    }

由于某些原因,while循环在第一次迭代后开始,只显示输入文件的第一句。其余代码工作正常,我只是想不出为什么它认为文件在第一次迭代后就结束了。

感谢

c++ getline sstream
1个回答
0
投票

首先,应在不使用eof的情况下读取文件,如πάνταῥεῖ注释(有关说明,请参见here:]

while( getline(inputFile, line) )
{
    // process the line
}

注意,前面的if也没有必要。

主要问题,假设ss是您先前定义的stringstream,来自逻辑:

ss << line;
while(ss){
    // stuff
}

while循环仅在ss失败时退出。但是您永远不会将ss重置为良好状态。因此,尽管您的外部循环确实读取了文件的每一行,但第一行之后的所有行都不会生成任何输出。

相反,您每次都需要reset the stringstream

ss.clear();
ss.str(line);
while (ss) {
    // stuff
}
© www.soinside.com 2019 - 2024. All rights reserved.