我正在使用以下代码从文件中获取行,直到找不到“#”。它有效,但我不明白为什么它获得两次相同的行。我如何避免它,即在调用string :: find(...)之后跳过一行?
do {
getline(file, line);
} while(line.find("#") != string::npos);
答案 0 :(得分:1)
简单地说,它没有。
您没有对输入结束进行任何检查。
仅在第二次迭代之后,第二次调用getline
后,才会在流上设置EOF并{{ 1}}操作失败。
当达到EOF时,EOF标志不设置,但尝试读取过去EOF后失败。
写下这个:
.find()
糟糕!现在你的循环体是空的,有更好的方法来写这个。
也许:
do {
} while (getline(file, line) && line.find("#") != string::npos);
那更好。 =)
答案 1 :(得分:0)
在检查返回的字符串之前,您应该检查是否已到达文件的末尾。
do {
getline(file, line);
} while(file.good() && line.find("#") != string::npos);