gpt4 book ai didi

c++ - cin.ignore 的 getline 问题

转载 作者:太空宇宙 更新时间:2023-11-04 14:07:41 25 4
gpt4 key购买 nike

我在使用 getline 函数时遇到问题。如果我的代码没有详细说明 stackoverflow 语法,我提前道歉。我遇到的是当我运行 addMember() 时,它提示用户输入名称,然后检查它是否已经存在。一旦通过,它就会继续向用户询问密码。如果一切顺利,它将被插入 vector 成员列表。从那里我应该能够退出并以新成员身份登录。当我立即调用此函数时打印的是“请输入成员(member)姓名:输入所需密码:”。它完全跳过了应该允许用户键入名称并直接输入密码的点。我知道我需要使用 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();

}

最佳答案

问题是您不了解输入流以及 getline 的工作原理。您应该阅读 cin.getline 上的引用资料和 cin.ignore了解它们的工作原理。

如果这些资源不能为您解决问题,本网站上有很多针对同一问题的答案,例如 this one.祝你好运!

关于c++ - cin.ignore 的 getline 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16286997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com