簡體   English   中英

cin.ignore的getline問題

[英]getline issues with cin.ignore

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

    }

問題是您不了解輸入流以及getline的工作方式。 您應該閱讀cin.getlinecin.ignore上的參考,以了解它們如何工作。

如果這些資源沒有為您解決,那么此站點上有很多關於同一問題的答案,例如這個問題 祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM