2013-04-29 63 views
1

我遇到了getline函数的问题。如果我的代码没有详细描述到stackoverflow语法,我提前道歉。我所遇到的是当我运行addMember()时,它会提示用户输入名称,然后检查它是否已经存在。一旦通过,它就会继续询问用户密码。如果一切顺利,它会被推入矢量成员列表中。从那里我应该可以退出并以新会员身份登录。当我立即调用此功能时打印的内容是“请输入成员名称:输入所需密码:”。它完全跳过了允许用户输入名称并直接输入密码的点。我知道我需要使用cin.ignore(1000,'\ n'),但所有这些都会从成员列表中删除名称或密码。例如:当我输入用户名时,它会正确读入,但密码读入前一个getline结尾处的换行符。有没有解决这个问题的方法,除了在主要的方面进行修改?请帮忙!谢谢!cin.ignore的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(); 

    } 

回答

0

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

如果这些资源不能为您解决问题,本网站上的相同问题有很多答案,例如this one.祝您好运!