cin.ignore的getline问题

时间:2013-04-29 19:48:28

标签: c++ getline

我遇到了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();

    }

1 个答案:

答案 0 :(得分:0)

问题在于您不了解输入流以及getline如何工作。您应该阅读cin.getlinecin.ignore上的参考文献,了解它们的工作原理。

如果这些资源没有为您清除,本网站上有很多答案可以解答同一个问题,例如this one.祝您好运!