无法输出我的整个文件

时间:2014-12-01 23:08:49

标签: c++ getline sstream

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循环在第一次迭代后开始出现,只显示输入文件的第一个句子。其余代码工作正常,我只是无法弄清楚为什么它认为文件在第一次迭代后已经结束。

由于

1 个答案:

答案 0 :(得分: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
}