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))みたいにすればいいでしょう。