C言語関係掲示板

過去ログ

No653 EOFの検出方法

[戻る] [ホームページ]
No.7143

EOFの検出方法。
投稿者---しょうぷぅ(2003/06/06 00:34:54)


現在あるデータをファイルから読み込む処理を書いています。
ファイルの中身は主にバイナリデータで、fscanf関数を使い読んでいます。

ファイルのフォーマットはある可変長の幅を持つデータを複数保持するようになっており、
while(!feof(fp))等としてファイルの終端に達するまでデータを読んでいきたいと思っております。

しかし、ファイルに納められている最後のデータを読んでも、そこは、あくまでも
EOFの直前であり、EOFではなく、当然のようにfeof()関数などは0を返します。
そして次のループに入り、ファイルの終端以降を読みにかかろうとしてエラーが出るのです。

ループの頭でfgetc()関数などを使い一文字読み込んだあとfeof()でチェックして、
偽が返ってきたらfseek()等で一文字分戻り・・・とすればできそうなのですが、
何だかとっても無駄のような気がします。

そこでもっとスマートにEOFの直前でEOFを検出する方法は無いでしょうか。

どなたかご存じの方いらっしゃいましたらよろしくお願いします。


No.7145

Re:EOFの検出方法。
投稿者---TDa(2003/06/06 01:02:15)


こんにちは。

普通は
while (fscanf() != EOF) {...}
と処理してwhileを抜けたらエラーかEOFですのでそこでfeofをチェックするのが
常套手段です。

No.7149

Re:EOFの検出方法。
投稿者---よた(2003/06/06 10:12:42)


>ファイルの中身は主にバイナリデータで、fscanf関数を使い読んでいます。

ん〜、おれあほやろか?何か勘違いをしてる?
バイナリファイルをfscanfで読み込む方法が分からない。

No.7151

Re:EOFの検出方法。
投稿者---shelly(2003/06/06 10:49:35)


>バイナリファイルをfscanfで読み込む方法が分からない。

・・・まあ"%c"で1バイトずつ読める。
あんまりやらんけど。
他にも読める指定子あるかな?

No.7152

Re:EOFの検出方法。
投稿者---よた(2003/06/06 11:06:24)


>・・・まあ"%c"で1バイトずつ読める。
>あんまりやらんけど。

やっぱし。それだけだよね。良かった。何か意味があるのかと思った。
ありがとうございました。おれ、あほじゃなかったぁ、かな・・・