使用针对struct的cin的getline insead时的bug

时间:2015-09-08 16:28:41

标签: c++ struct

我的代码运行正常,但当我将cin>>new_person.address更改为getline时,我运行时遇到了错误。

#include <iostream>

using namespace std;

struct person
{
    string name;
    string address;
    int phone_number;
};

person getNewPerson()
{
    person new_person;
    cout<<"Enter a name ";
    cin>>new_person.name;
    cout<<"Enter an address ";
    getline(cin, new_person.address, '\n');
    cout<<"Enter a phone number ";
    cin>>new_person.phone_number;
    return new_person;
}
person printPerson(person a_person)
{
    cout<<"This person name is: "<<a_person.name<<endl;
    cout<<"His address is: "<<a_person.address<<endl;
    cout<<"His phone number is: "<<a_person.phone_number<<endl;
}
int main()
{
    person my_person=getNewPerson();
    printPerson(my_person);
}

当我使用getline(cin, new_person.address, '\n');时,它无缘无故地跳过该语句并转到下一个语句。不知道发生了什么,请复制并粘贴代码,你就明白了。

1 个答案:

答案 0 :(得分:0)

它是这样设计的。在C ++中std::cin >> str;读取流中的下一个单词。更具体地说,它读取下一个标记,并且标记由空格分隔,因此它们有效地代表一个单词。

使用getline功能输入多个单词。