2013-04-29 2 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. 같은 질문에 대한 답변이 많습니다. 행운을 빕니다!