• ベストアンサー

ifstream を利用した1行分のテキスト読み込みでうまくいきません

こんにちは。 C言語はある程度使えるつもりでいます。 現在C++を勉強中でして、ファイルのIO のところをやっています。 が、テキストを1行読み込むというところで つまずいています。 以下はそのソースです。 string LineData; ifstream IFS; IFS.open("hoge.txt", ios::in | ios::binary); IFS >> LineData; とした場合、LineData には hoge.txt の1行分が 格納されるのを期待していたのですが、 実際には、空白があるとそこで読み込みが切れてしまいます。 例. hoge.txt の中身(※△は空白) --------------------------- 1行目AAABBB△CCCDDD 2行目AAABBB△CCCDDD 3行目AAABBB△CCCDDD --------------------------- IFS >> LineData; で取得したときの LineData --------------------------- 1行目AAABBB --------------------------- 期待していたのは --------------------------- 1行目AAABBB△CCCDDD --------------------------- 別の方法で読み込みを行ったほうがよいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • KoHal
  • ベストアンサー率60% (110/181)
回答No.4

operator>>()はホワイトスペースを区切りとします。ホワイトスペースであればスペースも改行もタブも区別しません。 そうでなければintやdoubleを読み込むときに困ります。 1行を文字列として読み込みたいのならgetlineを使います。 で、getlineを使うなら普通にstringに読み込みましょう。  getline( IFS, LineData ); ※このgetlineは非メンバ関数です。

haniue
質問者

お礼

的確なご指摘ありがとうございました。 予定通りの動作を行うことができて 助かりました。

その他の回答 (3)

  • suseimei
  • ベストアンサー率35% (17/48)
回答No.3

以下の記事が多少参考になるかもしれません。 http://www.ttoyota.com/msvcee/msvcee22.htm いろいろあるようですね。

  • uyama33
  • ベストアンサー率30% (137/450)
回答No.2

char buf[129]; IFS.getline(buf, 128); とるす。  内容は NO1の方とおなじです。。。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

getline を使うとか

関連するQ&A