[英]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.getline和cin.ignore上的參考,以了解它們如何工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.