3

我有一个包含用户名和密码的 auth.txt 文件。我的目的是在进入下一个菜单之前使用这个文件来查看用户是否输入了有效的用户名和密码。例如。auth.txt 包含用户\n 通行证。当他们选择一个菜单时,它会要求他们登录。如果他们输入错误,它什么也不做。每个密码和 usrname 都存储在 auth.txt 文件中。我尝试使用以下代码,但一无所获。请提前帮助和感谢。

if(getline(inauth, line)){ 

    if(line==user&& line==password){ 
    //your in

    }else cout<<"bye";
    }
4

3 回答 3

1

我不是 VC++ 开发人员,但这应该是您想要完成的正确逻辑。

// keep looping while we read lines
while (getline(inauth, line)) 
{
    // valid user
    if (line == user) 
    {
        // read the next line
        if (getline(inauth, line2))
        {
            if (line2 == password)
            {
                // successfully authenticated
                cout << "Success!";
            } 
            else 
            {
                // valid user, invalid password
                // break out of the while loop
                break;
            }
        }
    }
}
于 2012-05-12T14:28:47.200 回答
0

您只阅读一行,然后尝试与“用户”和“密码”进行比较。那肯定行不通。您需要调用 getline 两次。不要忘记检查错误,用户身份验证永远不会太安全。尝试这样的事情:

ifstream inauth("Secret password herein.txt");

if (inauth) {
    string usr, psw;

    if (getline(inauth, usr) && getline(inauth, psw) {
        if (usr == user && psw == password) {
            cout << "Phew, everything's fine.";
        } else {
            cout << "Wrong password/username.";
        }
    } else {
        cout << "I guess somebody opened the file in notepad and messed it up."
    }
} else {
    cout << "Can't open file, sorry.";
}
于 2012-05-12T14:34:31.223 回答
0

如果您的用户名和密码存储在由空格分隔的同一行中,那么您必须这样做

#include <sstream>

string line, username, password;
istringstream instream;
while (getline(inauth, line))
{
    // extract username and password from line using stringstream
    instream.clear();
    instream.str(line);
    instream >> username >> password;
    // do something here
}
于 2012-05-12T14:41:21.330 回答