cin >> と、cin.getline()

ちょっと詰まったとこのメモ。
こういう感じの入力ファイルがあって、

12 11
#S#######.##
..##.##....#
#..#....#..#
..#....##.##
.##.##.....#
....##.#.##G
.#.##.....#.
.#....###.#.
......##....
#.###.#..#..
#.......##.#
  cin >> n >> m;
  for(int i = 0; i < m; i++)
    cin.getline(data[i], sizeof(data[i]));

こういう感じで読みこもうとすると、
うまくいかない!
getlineは一行読み込むメソッドなわけですが、どうやらcin>>mで11を読み込んだ後の改行(\n)が残り、
それをgetlineで読み込んでしまうので、data[0]には何も入ってくれません。

で、どうするの?

一文字読み捨てればいいので、cin.get()を使いました。

  cin >> n >> m;
  cin.get();
  for(int i = 0; i < m; i++)
    cin.getline(data[i], sizeof(data[i]));

これでdata[0]にもちゃんとデータが入りましたとさ。
ただ、なんかキモいのでうまいやり方はないものか…
今回の場合は入力データの幅も分かってるので、もう一個ループ作ってcin>>data[i][j]にすることもできるんだけどね。

追記

get()だと1文字分しか読み飛ばさない
→一行目の末尾にスペースがあると対応できない
ので、getline()を一回読み飛ばす方法がいいよ。というアドバイスをもらいました。
たしかにそうだなーと。
cin.get()を、cin.getline(temp, sizeof(temp))みたいにすればいいでしょう。