getline 関数に問題があります。私のコードがスタックオーバーフローの構文に詳しくない場合は、事前にお詫び申し上げます。私が経験しているのは、addMember() を実行すると、ユーザーに名前の入力を求めるプロンプトが表示され、名前が既に存在するかどうかがチェックされます。通過すると、ユーザーにパスワードの入力を求めます。すべてがうまくいけば、ベクターメンバーリストにプッシュされます。そこから、新しいメンバーとして終了してログインできるはずです。この関数をすぐに呼び出すと、「メンバーの名前を入力してください: 希望のパスワードを入力してください:」と出力されます。ユーザーが名前を入力できるようにするポイントを完全にスキップし、パスワードの入力に直接進みます。cin.ignore(1000, '\n') を使用する必要があることは理解していますが、メンバーリストから名前またはパスワードを切り取るだけです。例: ユーザー名を入力すると、正しく読み取られますが、パスワードは前の getline の末尾にある改行文字で読み取られます。メインで再加工する以外に、この問題に対する解決策はありますか? 助けてください!ありがとう!
void Staff::addMember() {
string name;
string password;
bool alreadyexists = false;
cout << "Please enter name of member: ";
getline(cin, name);
if (name.length() == 0) {
cout << "You must enter a name. Please try again." << endl;
addMember();
} else {
for (unsigned int i = 0; i < memberlist.size(); i++) {
if (memberlist[i].getName() == name) {
alreadyexists = true;
cout << "That user already exists. Please try again." << endl;
addMember();
}
}
}
if (alreadyexists == false) {
cout << "Enter desired password: ";
getline(cin, password);
cout << password;
Member newMember(name, password);
cout << "At time of instance " << newMember.getName() <<endl;
memberlist.push_back(newMember);
cout << "A new member has been added!" << endl;
for (unsigned int i = 0; i < memberlist.size(); i++)
{
cout << memberlist[i].getName() << "\t"<< memberlist[i].getPassword() << endl;
}
cont();
// }
}
displayMenu();
}