0

在我创建的一个程序中,我需要将一些客户信息获取到一个数组中。以下是关于我的问题的代码。

struct CustomerType
{
    string fName;
    string lName;
    char gender;
    string address;
    string contactNo;
};

CustomerType Customer[1000];

我有以下代码来获取用户的输入。这i是我正在获取信息的客户的索引。

string add="";
cout<<left<<"\n"<<setw(29)<<"\t\t Name"<<": ";
    cin>>Customer[i].fName>>Customer[i].lName;
cout<<left<<"\n"<<setw(29)<<"\t\t Gender"<<": ";
    cin>>Customer[i].gender;
cout<<left<<"\n"<<setw(29)<<"\t\t Address"<<": ";
    getline(cin,add); Customer[i].address=add;
cout<<left<<"\n"<<setw(29)<<"\t\t Contact No."<<": ";
    cin>>Customer[i].contactNo;

但是当我运行程序时,它只要求输入姓名、性别和联系电话。但不是地址。它就像没有getline命令一样工作。

我该如何解决?

4

2 回答 2

1

getline如果“不跳过输入中的换行符,但operator >>确实”问题,这是老问题。简单的解决方案包括:

  1. 使用 acin.ignore(1000, '\n');跳过下一个换行符(假设换行符之前少于 1000 个字符)。此行位于getline通话之前。
  2. 一般仅getline用于读取数据,然后使用其他方法读取实际内容。[在你的情况下,唯一有点困难的是gender成员变量——但你可能想处理一个写“女性”的人,然后地址以某种方式变成“女性”,所以可能不是一个大问题。
于 2013-05-18T17:47:11.153 回答
0

如果您在使用 cin 之后使用 getline,则需要在使用后刷新缓冲区。如果您不这样做,getline 命令将尝试读取缓冲区并获取 cin 留下的“endline”,并自动将其用作其输入。

你可以简单地通过把cin.ignore(); 在 getline() 之前;或者像在 C 中使用的那样使用 fflush(stdin)。

于 2013-05-18T17:50:41.403 回答