Doesnt从文件中读取数据

Doesnt read data from file

本文关键字:读取 数据 文件 Doesnt      更新时间:2023-10-16

我做错了什么?我输入了正确的凭据,程序一直在说"无效的用户名或密码!"

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();
    }
}

请参阅我的内联评论:

#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