getline每次调用时候都在移动文件指针,第一次读完之后文件指针已经不在文件的开头了,所以当每次查询到相应的成语之后应当将文件指针重设为文件开头的位置并且break跳出循环(已经查询到并打印了就没必要继续往后查询了),本机调试通过,可复制自测,谢谢,代码如下:
#include <iostream>
#include<string>
#include<fstream>
using namespace std;
int main()
{
string a;
string myText;
ifstream MyReadFile("D:\\Idiom3.txt");
while (1){
cout << "请输入相应的成语: ";
cin >> a;
while (getline(MyReadFile, myText)) {
if (myText.find(a) != std::string::npos) {
cout << myText << "\n";
MyReadFile.seekg(ios::beg);
break;
}
}
}
MyReadFile.close();
return 0;
}
补充下查询不到成语的情况
#include <iostream>
#include<string>
#include<fstream>
using namespace std;
int main()
{
string a;
string myText;
bool find = false;
ifstream MyReadFile("D:\\Idiom3.txt");
while (1){
cout << "请输入相应的成语: ";
cin >> a;
find = false;
while (getline(MyReadFile, myText)) {
if (myText.find(a) != std::string::npos) {
cout << myText << "\n";
MyReadFile.seekg(ios::beg);
find = true;
break;
}
}
if ( !find){
cout <<"未查询到该成语"<<endl;
MyReadFile.clear();//当已经跑到文件尾的时候需要清除流信息,否则seekg不成功
MyReadFile.seekg(ios::beg);
}
}
MyReadFile.close();
return 0;
}