0

ungetc と fefo 関数を使用するコードがありますが、fefo が EOF をチェックしていないことに気付きました。以下は私のコードです。

 #include<stdio.h>
 int main ()
{
 FILE *fp;
  int c;
 char buffer [200];

 fp = fopen("", "r");
 if( fp == NULL ) 
 {
  perror("Error in opening file");
  return(-1);
  }
 while(!feof(fp)) 
 {
   c = getc (fp);
  if(c==EOF) // **why i need to check for EOF if fefo does?**
   break;
   /* replace ! with + */
   if( c == '!' ) 
   {
     ungetc ('@', fp);
   }
   else 
   {
     ungetc(c, fp);
   }
   fgets(buffer, 255, fp);
   fputs(buffer, stdout);
  }
  return(0);
}

入力は:

   hello !world

EOF が明示的にチェックされていない場合は outout

     hello @world
     hello @world // Bad its repeat

EOF が明示的にチェックされた場合の出力

   hello @world // Good

fefo の場合、EOF をチェックしてブレークする必要があるのはなぜですか?

4

1 に答える 1