ページ 11

テキストファイルからの読み込みについて

Posted: 2010年5月31日(月) 18:25
by いむ
今回で2度目の投稿となるのですが、どうしても
わからなかったところがあるので質問させていただきます。

以下のようなテキストファイルからデータを読み込んでいき、
ファイルの終わり(EOF)がくるまでループさせるということを
やっています。

テキストファイルの中身

25 2 3
4 5 6
7 8
[EOF]

ソースファイルの一部

    while (!feof(fp)) {

        fscanf(fp,"%d",&value);
        printf("%d\n",value);
    }

25
2
3
4
5
6
7
8

という結果が出てほしいのですが、実際は
最後の8が2回表示されてしまいます。
[EOF]の位置が下の場合にはちゃんと表示されるのですが、
今回のような場合にでもしっかりと表示されるような方法はありますか?

25 2 3
4 5 6
7 8[EOF]

Re:テキストファイルからの読み込みについて

Posted: 2010年5月31日(月) 18:46
by たかぎ
fscanfの返却値をちゃんと確認しましょう。

Re:テキストファイルからの読み込みについて

Posted: 2010年5月31日(月) 18:54
by いむ
>たかぎさん
お早い返信ありがとうございます。
以下のようにしてみたところ、自分の望むような
結果が表示されたのですがこれでいいのでしょうか?

    while (!feof(fp)) {

        if ((fscanf(fp,"%d",&value))==-1) break;
        printf("%d\n",value);
    }

Re:テキストファイルからの読み込みについて

Posted: 2010年5月31日(月) 19:11
by たかぎ
↓のほうがよいのでは?

if ((fscanf(fp,"%d",&value)) < 1) break;

Re:テキストファイルからの読み込みについて

Posted: 2010年5月31日(月) 19:17
by いむ
>たかぎさん

理解力がなくて申し訳ないのですが、
どうしてそのような判定式になるのでしょうか?

Re:テキストファイルからの読み込みについて

Posted: 2010年5月31日(月) 19:24
by たかぎ
fscanfの仕様を調べてみてください。

Re:テキストファイルからの読み込みについて

Posted: 2010年5月31日(月) 19:34
by いむ
>たかぎさん

fscanfはデータの読み取りに成功した個数を
返すので、戻り値が1より小さいという式を用いたということで
いいでしょうか?