我做错了什么?我输入了正确的凭据,程序继续说"用户名或密码无效!"
void user::login()
{
string username, uname;
string password, pword;
cout << "Enter your username: \n";
cin >> uname;
cout << "Enter your password: \n";
cin >> pword;
ifstream data("data.txt");
if (data.is_open())
{
while (!data.eof())
{
data >> username >> password;
if (uname == username && pword == password)
{
cout << "Login successfully!\n";
Sleep(2000);
mainMenu();
}
else if (uname != username || pword != password)
{
cout << "Invalid username or password!\n";
Sleep(2000);
login();
}
}
data.close();
}
}
答案 0 :(得分:2)
请参阅我的内联评论:
#include <string>
#include <iostream>
#include <fstream>
// You should not use using namespace std! In here only for brevity.
using namespace std;
// Use a proper API: return account name on success, empty string otherwise.
// Throw an exception on error.
string login() throw (const char*)
{
// embrace C++11!
if (ifstream data {"data.txt"}) {
string username, uname;
string password, pword;
// Always test if the IO is broken!
if (!((cout << "Enter your username: \n") &&
(cin >> uname) &&
(cout << "Enter your password: \n") &&
(cin >> pword))) {
throw "Could not get user credentials.";
}
// debug output, remove in production:
cerr << "Credentials: " << uname << " (" << pword << ")" << endl;
// read a line from data.txt
while (data >> username >> password) {
// debug output, remove in production:
cerr << "Read: " << username << " (" << password << ")" << endl;
// compare input:
if ((uname == username) && (pword == password)) {
return username;
}
}
// no input matched
return "";
// no need to explicitly close the stream
} else {
throw "Password file could not be opened.";
}
}
int main() {
string account_name;
try {
// The caller should include a loop, not the login function.
account_name = login();
} catch (const char *message) {
cerr << "Error: " << message << endl;
return 1;
}
if (!account_name.empty()) {
cout << "Hello, " << account_name << endl;
} else {
cout << "Could not authenticate!" << endl;
}
return 0;
}
data.txt中:
Neuroosi hunter2
Kay supersecret
Arunmu hello
crashmstr password1234