我有一个使用 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,则输出
hello @world
hello @world // Bad its repeat
显式检查 EOF 时输出
hello @world // Good
为什么我需要检查 EOF 并在 fefo 时中断?