アプリ版:「スタンプのみでお礼する」機能のリリースについて

数字の羅列した単純なテキストファイルを読み込ませたいのですが、
以下のようにすると、途中で改行などで一行あけた場合、そこで読むのを
ストップしてしまいます。


if (fgets(buf, sizeof(buf), fp) == NULL) {

改行にくじけることなく、ファイルの最後まで読み込ませるにはどうしたら
いいのでしょうか。
ちなみに、以下のようにやると、

  while(getc(fp) != EOF){

こんどは改行をものともせず、ファイルのお終いまで読んでくれるのですが、
2バイト文字(頭一文字が化ける)、のっけ一行目に数値(10桁)を置くと
一文字かけて9桁になってしまいます。
2行目以降はちゃんと10桁です。(一行目に改行をいれて、2行目以降に書くと大丈夫のようです。変)
簡単なようで、つまってます。どうかよろしくお願いします。

A 回答 (4件)

fgets は空行があっても NULL を返さないと思いますが。


環境は何ですか?

#include <stdio.h>

int main()
{
 char buf[256];
 FILE *fp;

 fp = fopen("test.txt", "r");

 while (fgets(buf, sizeof(buf), fp)) {
  printf("%s", buf);
 }

 fclose(fp);
 return 0;
}

/* test.txt */
123

456

/* 実行結果 */
123

456

/* 環境 */
Windows 2000, BCC 5.5
    • good
    • 0
この回答へのお礼

サンプルまでご提供いただきまして、本当にありがとうございます。
確認実行し、無事解決しました。
尚、環境は VC++6.0 Windows2000 でした。

お礼日時:2003/12/19 09:59

fgetc を使う場合はこんな風にすればいいです。



int c;
while (c = fgetc(fp), c != EOF) {
 putchar(c); /* 表示してみる */
}
    • good
    • 1
この回答へのお礼

ありがとうございました。
これも有効でした。本件、無事解決しました。
こんなにも、4人もの方の回答をいただけて感謝です。

お礼日時:2003/12/19 10:01

while(!feof(fp)){


fgets(buf, sizeof(buf), fp)
}

は,どうでしょうか.
または,1文字をバッファに戻すことができますので,

  while(getc(fp) != EOF){
ungetc(fp);
/*つづき*/
  }
とやれば,欠けないでしょう.
ungetc(fp)は,1文字をバッファに戻す関数です.
    • good
    • 0
この回答へのお礼

まことにありがとうございました。ungetc(fp) は初見です。使えそうなので頭にとめておきます。

お礼日時:2003/12/19 09:57

fgetsがNULLの時、


feof(fp)が非0ならファイルの最後だし、
ferror(fp)が非0ならエラーが発生した場合です。
そのどちらにも該当しなければ処理を続けましょう。
    • good
    • 0
この回答へのお礼

ありがとうございました。
本件、無事解決しました。

お礼日時:2003/12/19 09:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!