プログラムを実行すると、ユーザーはログインできますが、間違ったユーザー名を入力すると、有効なユーザー名を入力しなかったと言って、ユーザー名のチェック ループが再度実行されます。これは、1つのことを除いて完全に正常に機能します。ログインを 3 回試行し、3 回目の試行が正しく、パスワードの入力を求めるプロンプトが表示されたとします。彼らがそれを入力すると、2番目のパスワードを要求し、次に3番目のパスワードを要求します. 他の試行の機能を完了しているようです。これを確認する方法が思い浮かびません。何か案は。
それを見ると、私がUserCheck
の中で呼び出していることがわかりますgetNameIndex
。これがエラーが発生している場所であるとほぼ確信しています。
ユーザーをチェックする関数:
void User_Psw::UserCheck()
{
// read from the database
ifstream fin("dataBase.txt", ios::in);
if( !fin.good() )
{
cout << "Failed to open database file." << endl;
return;
}
while (fin >> username >> password)
{
Usernames.push_back(username);
Password.push_back(password);
++sizeOfDatabase; // This may or may not be needed elsewhere.
}
// rest of the program
cout << "Username: ";
cin >> username;
getNameIndex();
cout << "Password: ";
cin >> password;
if(!PasswordMatches())
{
cout << "Access denied";
}
else
{
cout << "Success! You have logged in.";
}
}
これがユーザー名チェック機能です
void User_Psw::getNameIndex()
{
userThere = false;
for(int i=0; i < sizeOfDatabase; i++)
{
if (Usernames[i] == username)
{
index = i;
userThere = true;
}
}
if (userThere == false)
{
cout << "\nThat user name does not exsist. \n";
cout << "Please try again. \n\n";
UserCheck();
}
}