1

我在使用 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();

    }
4

1 回答 1

0

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

如果这些资源不能为您解决问题,那么这个网站上有很多相同问题的答案,比如这个。祝你好运!

于 2013-04-29T21:44:48.563 回答