0

function の使用に問題がありますfeof。これは私のコードです:

while(!feof(archlog))
{  if(!fgets(line,MAXLINE,archlog))
     printf("\nERROR: Can't read on: %s\n", ARCHTXT);
   else
     printf("%s",line);
}

これを実行すると、ファイルのテキストが出力されますが、余分なループが作成され、エラーが出力されます。これを回避したいので、余分なループなしでファイルのテキストのみを出力したいのです。

4

4 に答える 4

1

ファイルが改行で終わると、ループがもう一度入ります。

回避策は次のとおりです。

while(!feof(archlog))
{  if(!fgets(line,MAXLINE,archlog))
     printf("\nERROR: Can't read on: %s\n", ARCHTXT);
   else
     printf("%s",line);

   if ( (c=fgetc(archlog)) == EOF)
      break;
   ungetc(c, archlog);
}
于 2013-03-12T17:52:04.023 に答える
1

gets関数が EOF を読み取ると、EOF フラグが設定されます。これは、最後の反復で常にエラー メッセージがトリガーされることを意味します。この後、ループは最後の読み取りでトリガーされた EOF フラグを再度テストし、ループを終了します。

ループ内に EOF テストを配置することで、これを回避できます。そこで、読み取りが成功したときにテキストを出力するか、失敗した場合にループを終了するようにブール値を設定できます。

于 2013-03-12T17:55:35.687 に答える
0

feof(FILE *f)ループ内では使用しないでください。これEOFは、読み取り済みで到達していない場合にのみ true を返すため、feof(FILE *f) の使用方法を参照してください。

代わりfgetsに、条件の戻りコードを使用します。

while(fgets(line, MAXLINE, archlog) != NULL) {
    printf("%s", line);
}

feof(archlog)ループ内でチェックする必要はありません。エラーチェックにはferror(archlog)を使用します。

于 2013-03-12T18:03:40.820 に答える
0

私は常に 2 つの関数呼び出しを逆にします。

while(fgets(line,MAXLINE,archlog))
{  if(feof(archlog))
     break;
   else
     printf("%s",line);
}

ファイルの終わりが読み取られると、それは私を解放します。エラーまたは EOF で発生するためferror(archlog)に、呼び出しに「or」することがあります。feof()

于 2013-03-12T17:55:25.617 に答える