1

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();

    }
4

1 に答える 1

0

問題は、入力ストリームと getline の仕組みを理解していないことです。cin.getlinecin.ignoreの参照を読んで、それらがどのように機能するかを理解する必要があります。

これらのリソースで問題が解決しない場合は、このサイトに同じ質問に対する回答がたくさんあります幸運を!

于 2013-04-29T21:44:48.563 に答える