• ベストアンサー

Getlineについて・・・・・・

string temp; ifstream f(test.txt); while(getline(f, temp)){ (省略) } こんなかんじで、入力ファイルから1行づつ読み込んでいくのですが、もし、tempに改行のみが入った場合、(例えば入力ファイル test.txt に1行目、2行目は文があるが、3行目は改行で、4行目からまた文があり、読み込みたいのは、2行目までといった場合) 即while文から抜けるというふうにしたいのですがどうすればいいでしょうか? 詳しい方お願いします。

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

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

while( getline(f, temp) && !temp.empty() ){ (省略) } その1. getlineは改行文字は読み込まないので空行ならtempは文字数=0になる。 その2. getline(f,temp)がfalseなら!temp.empty()は評価されない。 おまけ。 basic_stringに読み込むgetline()はれっきとしたC++標準ライブラリの関数です。

chihiro5203
質問者

お礼

ありがとうございました。自分の思っていた通りに実行できました。ありがとうございました。

その他の回答 (1)

  • rentahero
  • ベストアンサー率53% (182/342)
回答No.1

…getlineってC++? open watcomのライブラリ調べたけどないような… さて 1行ずつ読めるんですね? で、改行は0x0a(lf)/0x0d(cr)/0x0d+0x0a(cr+lf)のどれかですよね? while(getline.... { int brkflg=0; // 終了フラグ switch(temp[0]) { case 0x0d: case 0x0a: //空行なので、抜ける brkflg=1; break; } if(brkflg) break; // 行単位の処理... } //読み込めなかった or 空行が来たので抜けてきたはず ということじゃないのかなあ。

chihiro5203
質問者

お礼

無事解決しました。ありがとうございました。

chihiro5203
質問者

補足

ありがとうございます。早速参考にしてやってみたのですがうまくいきませんでした。 >…getlineってC++? C++のはずです。私が読んでいる参考書(明らかに初心者用)によると、 getline(ファイル, String変数); とすることで、ファイルから、1行String変数に読み込むというものらしいです。getlineは、ファイルの終わりに来て読み込むべきものがなくなると、実質0やfalseと同じような「失敗の合図」を返すそうです。 ちなみに、こんな言い方でいいのかわかりませんが、includeファイルはiostreamです。 実際に質問のときの例で最後まで、実行し、画面に出力すると、 1行目の文******** 2行目の文******** 3行目 改行 4行目の文******** こんな感じになります。

関連するQ&A

専門家に質問してみよう