我有一个如何使用分隔符读取文件的问题;阅读和比较密码和用户名。 目前我的代码只允许我读取一个用户名和一个密码,每个都在一个单独的文本文件中。
我希望我的文本文件采用这种格式,函数将逐行检查文本文件,每个用户名和密码用“;”分隔;
user;pass
user2;pass2
user3;pass3
这是我目前的代码。
void Auth()
{
ifstream Passfile("password.txt", ios::in);
Passfile>>inpass;
ifstream Userfile("username.txt", ios::in);
Userfile>>inuser;
//system("clear");
cout<<"USERNAME: ";
cin>>user;
cout<<"PASSWORD: ";
cin>>pass;
Userfile.close();
Passfile.close();
if(user==inuser&&pass==inpass)
{
cout<<"\nLogin Success!!\n";
cin.get();
Members();
}
else
{
cout<<"\nLogin Failed!!\n";
main();
}
}
答案 0 :(得分:4)
你可以使用getline,就像那样:
#include <iostream>
#include <fstream>
#include <string>
bool authenticate(const std::string &username, const std::string &password) {
std::ifstream file("authdata.txt");
std::string fusername, fpassword;
while (file) {
std::getline(file, fusername, ';'); // use ; as delimiter
std::getline(file, fpassword); // use line end as delimiter
// remember - delimiter readed from input but not added to output
if (fusername == username && fpassword == password)
return true;
}
return false;
}
int main() {
std::string username, password;
std::cin >> username >> password;
return (int)authenticate(username, password);
}
答案 1 :(得分:2)
有几个选择:
std::getline
会使用终结符,因此您可以使用';'
作为名称后的getline的终结符,而不是常规的'\n'
一行读入std::string
(使用getline
甚至>>
),然后使用std::string::find
查找分号,然后您就可以使用std::string::substr()
将名称和密码分开。
正则表达式或类似但可能不是你想要的。
您指定显示格式的方式,它全部存储在一个文件中。
你可以
加载整个文件,然后存储std::map< std::string, std::string >
,然后检查用户登录信息。
由于您只需登录一次,因此在用户输入用户名(和密码)之后,您会读取该文件,一次一行,直到找到与他们输入的名称相匹配的文件。< / p>