我遇到了getline函数的问题。如果我的代码没有详细说明stackoverflow语法,我会提前道歉。我遇到的是当我运行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();
}
答案 0 :(得分:0)
问题在于您不了解输入流以及getline如何工作。您应该阅读cin.getline和cin.ignore上的参考文献,了解它们的工作原理。
如果这些资源没有为您清除,本网站上有很多答案可以解答同一个问题,例如this one.祝您好运!