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