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循环在第一次迭代后开始,只显示输入文件的第一句。其余代码工作正常,我只是想不出为什么它认为文件在第一次迭代后就结束了。
感谢
首先,应在不使用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
}