■ ::getline()でfailbitが多発

[Visual C++ Q & A 掲示板] [過去ログの一覧]


ahoogarasu 2007/12/03(月) 17:08:25 <中級者>
getline()を用いてテキストファイルを読み込む単純なプログラムで、
読み込みの途中に頻繁にエラーが発生して、
rdstate()で調べると状態がfailbitなります。
これは頻発するものなのでしょうか?
毎回、発生する(テキストファイルの)行が異なるので、原因の見当がつかなくて困っています。

std::ifstream fp;
fp.open(filename.c_str(), std::ios::in);
std::string line;
while( !fp.eof() ){
getline( fp, line );
if( fp.fail() ){
printf("%d\n", fp.rdstate());
break;
}
}

-------------------------------------------------
テキストファイルの中身
13372 0.0 0.4938
13373 0.0 0.4934
13374 0.0 0.4928
13375 0.0 0.492133333333333
13376 0.0 0.491333333333333
13377 0.0 0.4904
13378 0.0 0.489333333333333
13379 0.0 0.488133333333333
13380 0.0 0.486866666666667

tetrapod 2007/12/03(月) 19:06:00
頻繁に発生する(=発生しないこともある)の?そりゃおかしい。
このソースでは毎回必ず発生するはずだが。
eof に達したときには必ず fail するので。

毎回必ず発生でなく、頻繁に(=発生しないこともある)のであれば原因が違う。

ahoogarasu 2007/12/03(月) 20:23:32 <中級者>
お返事ありがとうございます。

問題はまだ解決していないのですが、
説明がダメだったのと問題箇所の把握ができていませんでした。

正確には、困っているのは同じファイルを読んでいるにもかかわらず、
毎回異なる行数でwhileを抜けてしまうことです。
ファイルの最後eofに来ているようではなさそうです。

ahoogarasu 2007/12/04(火) 01:20:08 <中級者>
[[解決]]

CreateThreadとCランタイムライブラリを併用しているのが原因でした。
お騒がせしました。

毎週金曜日はポイント最大3倍!さらに4倍のチャンスも!

Programming Library