- ベストアンサー
Getlineについて・・・・・・
string temp; ifstream f(test.txt); while(getline(f, temp)){ (省略) } こんなかんじで、入力ファイルから1行づつ読み込んでいくのですが、もし、tempに改行のみが入った場合、(例えば入力ファイル test.txt に1行目、2行目は文があるが、3行目は改行で、4行目からまた文があり、読み込みたいのは、2行目までといった場合) 即while文から抜けるというふうにしたいのですがどうすればいいでしょうか? 詳しい方お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
while( getline(f, temp) && !temp.empty() ){ (省略) } その1. getlineは改行文字は読み込まないので空行ならtempは文字数=0になる。 その2. getline(f,temp)がfalseなら!temp.empty()は評価されない。 おまけ。 basic_stringに読み込むgetline()はれっきとしたC++標準ライブラリの関数です。
その他の回答 (1)
- rentahero
- ベストアンサー率53% (182/342)
…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 空行が来たので抜けてきたはず ということじゃないのかなあ。
お礼
無事解決しました。ありがとうございました。
補足
ありがとうございます。早速参考にしてやってみたのですがうまくいきませんでした。 >…getlineってC++? C++のはずです。私が読んでいる参考書(明らかに初心者用)によると、 getline(ファイル, String変数); とすることで、ファイルから、1行String変数に読み込むというものらしいです。getlineは、ファイルの終わりに来て読み込むべきものがなくなると、実質0やfalseと同じような「失敗の合図」を返すそうです。 ちなみに、こんな言い方でいいのかわかりませんが、includeファイルはiostreamです。 実際に質問のときの例で最後まで、実行し、画面に出力すると、 1行目の文******** 2行目の文******** 3行目 改行 4行目の文******** こんな感じになります。
お礼
ありがとうございました。自分の思っていた通りに実行できました。ありがとうございました。