所以我有一个代码应该在某个.txt文件中找到一串字符,如果输入在文件中,它说“我发现它”,但是当它不是时,它应该说“没有找到任何东西“,但它只是跳过那一步并结束。 我是初学者,对任何明显的错误都很抱歉。
#include <stdio.h>
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(void)
{
setlocale(LC_ALL, "");
string hledat;
int offset;
string line;
ifstream Myfile;
cout.flush();
cout << "Welcome, insert the string to find in the file. \n \n \n" << endl;
cin.get();
cout.flush();
Myfile.open("db.txt");
cin >> hledat;
if (Myfile.is_open())
{
while (!Myfile.eof())
{
getline(Myfile, line);
if ((offset = line.find(hledat, 0)) != string::npos)
{
cout.flush();
cout << "Found it ! your input was : " << hledat << endl;
}
}
Myfile.close();
}
else
{
cout.flush();
cout << "Sorry, couldnt find anything. Your input was " << hledat << endl;
}
getchar();
system("PAUSE");
return 0;
}
答案 0 :(得分:0)
有三种可能的情况。
您有案例1和3的打印输出,但不是2。
顺便说一下,你的循环条件是错误的。使用getline调用的结果,getline是读取尝试后的ostream对象。
while (getline(MyFile, line))
{
...
}
循环将在读取尝试失败时终止,这将在您读取最后一行后发生。您拥有它的方式,您将尝试在最后一行之后阅读,这将是不成功的,但您仍将尝试处理该不存在的行,因为在循环重新开始之前您不会检查eof。
答案 1 :(得分:0)
只需注释//cin.get();
,您就不需要它。
输出:
Welcome, insert the string to find in the file.
apple
Found it ! your input was : apple
除此之外,它就像一个魅力。
更正后的代码:
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(void)
{
setlocale(LC_ALL, "");
string hledat;
int offset;
string line;
ifstream Myfile;
cout.flush();
cout << "Welcome, insert the string to find in the file. \n \n \n" << endl;
//cin.get(); <----- corrected code
cout.flush();
Myfile.open("db.txt");
cin >> hledat;
if (Myfile.is_open())
{
while (!Myfile.eof())
{
getline(Myfile, line);
if ((offset = line.find(hledat, 0)) != string::npos)
{
cout.flush();
cout << "Found it ! your input was : " << hledat << endl;
}
}
Myfile.close();
}
else
{
cout.flush();
cout << "Sorry, couldnt find anything. Your input was " << hledat << endl;
}
getchar();
system("PAUSE");
return 0;
}