とけろぐ

[C++入力]cinとgetline

今日CodinGameで知ったことをメモ

//以下hogeはstring型

5

というような何の変哲もない数字の入力の後に

## ## ##  #  #

というような空白交じりの入力が与えられて、それをcin>>hoge;を使って読み取ろうとした。

すると空白のところで読み込みが止まってしまう。そういえばそうだった…

次にgetline(cin,hoge);としてみた。するとなぜか1行ずれる。

不思議に思って調べた結果、その前の何の変哲もない数字の入力の読み込み(cin>>n;)の後に残っていた改行を読み込んでしまうことが原因だということが判明した。

下記のようにcin>>n;の後の一発目のgetlineは2回実行して1回目を捨てることにした結果解決した。

cin>>n;
string hoge,tmp;
getline(cin,tmp);//捨てる
getline(cin,hoge);//使う

参考:cin >>; と、cin.getline() - あの日書いたコードの意味を僕はまだ知らない。