::getline()でfailbitが多発

解決


ahoogarasu  2007-12-03 17:08:25  No: 67086  IP: 192.*.*.*

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  No: 67087  IP: 192.*.*.*

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

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

編集 削除
ahoogarasu  2007-12-03 20:23:32  No: 67088  IP: 192.*.*.*

お返事ありがとうございます。

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

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

編集 削除
ahoogarasu  2007-12-04 01:20:08  No: 67089  IP: 192.*.*.*

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

編集 削除