【问题标题】:bug when use getline insead of cin for struct [duplicate]使用 getline 而不是 cin 结构时的错误 [重复]
【发布时间】:2015-12-04 10:26:40
【问题描述】:

我的代码运行良好,但是当我将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'); 时,它会无缘无故地跳过该语句并转到下一个语句。不知道怎么回事,复制粘贴代码你就明白了。

【问题讨论】:

  • 问题是我使用 cin 作为第一个字符串和 getline 作为第二个字符串。将两个字符串都设置为 getline 后,程序可以完美运行。
  • 问题是我应该使用 cin.ignore();

标签: c++ struct


【解决方案1】:

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

使用getline函数输入多个单词。

【讨论】:

  • 试试代码,你就会明白我的意思了!当我将 getline 用于 struct 时,它会跳过该语句并转到下一个(cin>> for integer)。
  • 需要使用cin.ignore()来防止getline的跳过
猜你喜欢
  • 2021-08-26
  • 1970-01-01
  • 2017-03-07
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
相关资源
最近更新 更多