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. a を使用しcin.ignore(1000, '\n');て、次の改行をスキップします (改行の前が 1000 文字未満であると想定)。この行はgetline呼び出しの前に出ます。
  2. getline一般的なデータの読み取りのみに使用してから、他の方法を使用して実際のコンテンツを読み取ります。[あなたの場合、やや難しいのはgenderメンバー変数だけですが、おそらく「女性」と書いている人に対処したいのですが、アドレスが何らかの形で「emale」になるので、大きな問題ではないかもしれません.
于 2013-05-18T17:47:11.153 に答える
0

後で getline を使用する場合は、cin を使用した後にバッファーをフラッシュする必要があります。そうしないと、getline コマンドはバッファーを読み取って cin から残された「エンドライン」を取得し、それを自動的に入力に使用しようとします。

cin.ignore();を置くだけでそれを行うことができます。getline(); の前に または、C で使用するように fflush(stdin) を使用します。

于 2013-05-18T17:50:41.403 に答える