cinとgetlineを連用して、1回の入力の問題しか取得できません

1205 ワード

C++でしょうか、こんな質問がありました.
int d; cin >> d; string a; getline(cin,a);

2回入力されているように見えますが、実際には1回しか入力されていません.aの値はどのように取得すればいいか分かりません.
実際にはバッファの問題です.
cinは入力を取得した後,dに直接値を付与するのではなく,先にバッファに格納し,getlineを呼び出すとバッファ内のデータはまだ解放されていない.したがってgetlineはバッファから直接データを読み出します.そのため、実際には上記のコードは1回の入力しか取得されません.
では、aの値を取得するにはどうすればいいのでしょうか.2つの方法:
1.取得→リリース→取得
int d; cin >> d; string a; cin >> a;

2.一度にバッファに読み込んで、一括して読み込む
コードは同じですが、入力は次の形式に変更されました.
  : 42str

ここで、dは42、aはstrを得る.