好的,当我看到此线程时:Why is iostream::eof inside a loop condition (i.e. `while (!stream.eof())`) considered wrong?
我阅读了答案,但我真的不明白这是什么错误,可能是因为我没有c ++的丰富经验,但是我的代码却按预期的方式工作。
int main()
{
ifstream file;
string text, search;
int offset;
cout << "Enter a word: "; cin >> search;
file.open("Find.txt");
if (file.is_open()) {
while (!file.eof()) {
file >> text;
offset = text.find(search, 0);
if (offset != string::npos) {
cout << text << endl;
}
}
}
else {
cout << "Error!";
return 0;
}
file.close();
}
我输入一个单词,然后在一个文本文件中搜索它,使用该单词的问题为零。那么,什么时候认为这种情况不对?
答案 0 :(得分:1)
我不会重复该主题中的所有内容;那会浪费时间。
如果您这样做:
while (!file.eof()) {
file >> text;
// offset = text.find(search, 0);
// if (offset != string::npos) {
cout << "Text: " << text << endl;
// }
}
…然后您会看到问题:每次运行程序时,都会进行一次“额外”循环迭代,其中text
的值与上一次迭代相同。
由于您的输出取决于在text
中搜索特定子字符串的结果,因此如果在输入的最后一行搜索失败,您就可以摆脱它!但是,如果最后一行匹配,您将再次看到问题。
这种循环输入方式不会总是引起错误。这就是链接的“问答”说“几乎肯定是错误的”的原因。有时,循环内部的逻辑是专门为正常工作而设计的。有时候,就像您所做的那样,恰好发生以避免该错误。
正确的代码是:
while (file >> text)
{
offset = text.find(search, 0);
if (offset != string::npos) {
cout << text << endl;
}
}