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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
いむ

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

#1

投稿記事 by いむ » 15年前

今回で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:テキストファイルからの読み込みについて

#2

投稿記事 by たかぎ » 15年前

fscanfの返却値をちゃんと確認しましょう。

いむ

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

#3

投稿記事 by いむ » 15年前

>たかぎさん
お早い返信ありがとうございます。
以下のようにしてみたところ、自分の望むような
結果が表示されたのですがこれでいいのでしょうか?

    while (!feof(fp)) {

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

たかぎ

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

#4

投稿記事 by たかぎ » 15年前

↓のほうがよいのでは?

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

いむ

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

#5

投稿記事 by いむ » 15年前

>たかぎさん

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

たかぎ

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

#6

投稿記事 by たかぎ » 15年前

fscanfの仕様を調べてみてください。

いむ

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

#7

投稿記事 by いむ » 15年前

>たかぎさん

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

閉鎖

“C言語何でも質問掲示板” へ戻る