電子書籍の厳選無料作品が豊富!

string temp;
ifstream f(test.txt);

while(getline(f, temp)){

(省略)
}

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

A 回答 (2件)

while( getline(f, temp) && !temp.empty() ){


(省略)
}

その1.
getlineは改行文字は読み込まないので空行ならtempは文字数=0になる。

その2.
getline(f,temp)がfalseなら!temp.empty()は評価されない。

おまけ。
basic_stringに読み込むgetline()はれっきとしたC++標準ライブラリの関数です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/04/15 00:49

…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行目の文********

こんな感じになります。

補足日時:2005/04/15 00:26
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/04/15 00:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!