如果他/她输入的数据(字)存在于.txt文件中,我需要一些可以验证输入的内容。如果只有一个条件,我的代码就可以工作了。
if(line.find("2014-1113") != string::npos)
但是当我尝试添加其他条件时..每次运行程序时,else条件始终是输出。我不知道为什么......
我尝试进行实验,以便如果用户输入我的txt文件中不存在的单词,则会输出他/她输入的数据有问题。当我运行使用调试模式时。这是输出:
cout << "NOT FOUND!";
break;
直到我运行它,即使我更改单词并且它存在于我的txt文件中,仍然ELSE条件是输出..
有谁知道我的问题?谢谢!
这是我的示例txt文件:
2015-1111,Christian Karl,M
2015-1112,Joshua Evans,M
2015-1115,Jean Chloe,F
2015-1113,Shairene Traxe,F
2015-1114,Paul Howard,M
然后我的代码:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
ifstream stream1("db.txt");
string line ;
while( std::getline( stream1, line ) )
{
if(line.find("2015-1113") != string::npos){ // WILL SEARCH 2015-1113 in file
cout << line << endl;
}
else{
cout << "NOT FOUND!";
break;
}
}
stream1.close();
system("pause");
return 0;
}
答案 0 :(得分:2)
当你的代码越过第一行时,它找不到它要查找的内容,并进入else子句。然后打印“NOT FOUND”并中断(break
停止while循环)。
你应该做的是这些方面:
bool found = false;
while( std::getline( stream1, line ) && !found)
{
if(line.find("2015-1113") != string::npos){ // WILL SEARCH 2015-1113 in file
cout << line << endl;
found = true;
// If you really want to use "break;" Here will be a nice place to put it. Though it is not really necessary
}
}
if (!found)
cout << "NOT FOUND";
答案 1 :(得分:0)
由于您的if条件位于循环内部,因此else语句将针对不包含您要搜索的内容的每一行运行。你需要做的是使用bool标志并在循环中设置它。循环结束后,检查标志并查看是否找到了该行。
bool found = false;
while(std::getline(stream1, line) && !found )
{
if(line.find("2015-1113") != string::npos){ // WILL SEARCH 2015-1113 in file
found = true;
}
}
if (found)
std::cout << "Your line was found.";