2015年2月20日金曜日

while()と.eof()でのファイル読み出しの最終行重複の謎が解けた

テキストファイルをwhileループで読み出すと最終行が重複する謎について解けたので報告する。




ようするに、whileループは、do-while的に使え、ということです。


つまり、ファイルの読み込みにおいてはいきなりwhile()を呼び出してはいけません。
先に一度ファイル読み込みを行っておく必要がある、ということでした。


こうすると、期待したとおりに動作します。




具体的には、
(数字がかかれたテキストファイルを読み込む場合)
"somefile.txt"の中身。
0.0
1.0
2.0
3.0
--------------------------------------------------------------------------------------------
#include<fstream>
#include<iostream>


int main(){
  ifstream fin("somefile.txt");
  //エラーチェックなどは省略。


  double buf;


  fin >> buf;            //この一行をここで入れるのがポイントです!!
    while(!fin.eof()){
      fin >> buf;
      cout << buf;
    }


  return 0;
}
--------------------------------------------------------------------------------------------
結果はテキストファイルと同じです。(あたりまえの動作がやっと実現)。


こうやっておけばもう怖いものはない!!


なお、eof()の括弧を忘れないように!ないとコンパイル時に難しいこと言われます。
よかったよかった。

0 件のコメント:

コメントを投稿