为什么输入字符串时代码跳转?

Why code is jumping while inputting strings?

我正在输入字符串。但是我的程序在输入名称和地址时跳转到下一行。当名称行运行时,它不输入​​字符串并跳转到父亲姓名,地址的下一行也是如此。

有什么问题请告诉我。谢谢。

#include<iostream>
#include<string.h>
#include<sstream>
using namespace std;

class StaffRegistration{
private:

    ///data members
    string cnic, name, fatherName, dob, qualification, designation, joiningDate, address;
    int day, month, year;
    int salary, contact;

    ///set methods
    void setCNIC(string sCNIC);
    void setName(char sname[]);
    void setFatherName(string sfName);
    void setDOB(char sdob[]); //array because its fixed
    void setQualifaction(string sq);
    void setDesignation(string sdesignation);
    void setJoiningDate(char sjDate[]);
    void setAddress(string sAddress);
    void setSalary(int);
    void setContact(int scontact);

    //get methods
    void getCNIC();
    void getName();
    void getFatherName();
    void getDOB();
    void getQualification();
    void getDesignation();
    void getJoiningDate();
    void getAddress();
    void getSalary();
    void getContact();


public:

    void inputStaffData();
    void displayStaffData();
};

void StaffRegistration::inputStaffData()
{
    cout<<"Please enter National Identity Card Number (CNIC)\n";
    getCNIC();

    cout<<"\nPlease enter name \n";
    getName();

    cout<<"\nPlease enter father name \n";
    getFatherName();

    cout<<"\nPlease enter date of birth (dd,mm,yyyy)\n";
    getDOB();

    cout<<"\nPlease enter qualification\n";
    getQualification();

    cout<<"\nPlease enter designation\n";
    getDesignation();

    cout<<"\nPlease enter salary\n";
    getSalary();

    cout<<"\nPlease enter joining date (dd,mm,yyyy)\n";
    getJoiningDate();

    cout<<"\nPlease enter contact number\n";
    getContact();

    cout<<"\nPlease enter address information\n";
    getAddress();

    cout<<endl<<endl<<"Record added successfully!\n";
}


// definitions of getter functions
void StaffRegistration::getName()
{
    //char name[40];
    string name;
    getline(cin, name);
    cout<<name;
}

void StaffRegistration::getCNIC()
{
    string gCNIC;
    cin>>gCNIC;
    setCNIC(gCNIC);
}

void StaffRegistration::getFatherName()
{
    string fname;
    getline(cin, fname);
    setFatherName(fname);
}

void StaffRegistration::getDOB()
{
    char dob[11];
    cin>>dob;
    setDOB(dob);
}

void StaffRegistration::getQualification()
{
    string q;
    getline(cin, q);
    setQualifaction(q);
}

void StaffRegistration::getDesignation()
{
    string designation;
    getline(cin, designation);
    setDesignation(designation);
}

void StaffRegistration::getSalary()
{
    int salary;
    cin>>salary;
    setSalary(salary);

}

void StaffRegistration::getJoiningDate()
{
    char jdate[11];
    cin>>jdate;
    setJoiningDate(jdate);

}

void StaffRegistration::getContact()
{
    int con; 
    cin>>con;
    setContact(con);
}

void StaffRegistration::getAddress()
{
    string add;
    getline(cin, add);
    setAddress(add);
}

////definitions of setter functions
void StaffRegistration::setName(char sName[])
{
    name=sName;
}

void StaffRegistration::setCNIC(string sCNIC)
{
    cnic=sCNIC;
}

void StaffRegistration::setFatherName(string sfName)
{
    fatherName=sfName;
}

void StaffRegistration::setDOB(char sdob[])
{
    dob=sdob;
}

void StaffRegistration::setQualifaction(string sq)
{
    qualification=sq;
}

void StaffRegistration::setDesignation(string sdesignation)
{
    designation=sdesignation;
}

void StaffRegistration::setSalary(int s)
{
    salary=s;
}

void StaffRegistration::setJoiningDate(char sjDate[])
{
    joiningDate=sjDate;
}

void StaffRegistration::setContact(int scontact)
{
    contact=scontact;
}

void StaffRegistration::setAddress(string sAddress)
{
    address=sAddress;
}



int main()
{
    StaffRegistration a;
    a.inputStaffData();

}

在使用getline()之前使用cin.ignore();来清空buffer.Read更多这里:When and why do I need to use cin.ignore() in C++?