4

; の区切り文字を使用してファイルを読み取る方法に問題があります。パスワードとユーザー名を読み取って比較します。現在、私のコードでは、それぞれ別のテキストファイルで 1 つのユーザー名と 1 つのパスワードしか読み取ることができません。

テキストファイルをこの形式にしたいのですが、関数はテキストファイルを行ごとにチェックし、各ユーザー名とパスワードは「;」で区切られています。

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

2 に答える 2

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);
}
于 2012-10-23T13:04:37.963 に答える