c语言 feof()多读一次
刚接触feof,对于feof()为什么会多读一次,有些好奇,也百度了一些资料看的有些模糊,自己想了一下,不知道对不对feof()//内部可能是{判断该字符的fp->fla...
刚接触feof,对于feof()为什么会多读一次,有些好奇,也百度了一些 资料看的有些模糊,自己想了一下,不知道对不对
feof() //内部可能是
{
判断该字符的 fp->flag是否被置为EOF
是 ->return 0
判断该字符是否为结尾
是
指针指向下一个字符
否则
{ 指针指向下一个字符
指针指向的字符的 fp->flag是否被置为EOF}
}
还有fp->flag是什么,感觉有点模糊
希望在座的大佬能指出我的不足之处,万分感谢
{
判断该字符的 fp->flag是否被置为EOF
是 ->return 0
判断该字符是否为结尾
是
指针指向下一个字符
否则
{ 指针指向下一个字符
指针指向的字符的 fp->flag是否被置为EOF}
}
还有fp->flag是什么,感觉有点模糊
希望在座的大佬能指出我的不足之处,万分感谢 展开
feof() //内部可能是
{
判断该字符的 fp->flag是否被置为EOF
是 ->return 0
判断该字符是否为结尾
是
指针指向下一个字符
否则
{ 指针指向下一个字符
指针指向的字符的 fp->flag是否被置为EOF}
}
还有fp->flag是什么,感觉有点模糊
希望在座的大佬能指出我的不足之处,万分感谢
{
判断该字符的 fp->flag是否被置为EOF
是 ->return 0
判断该字符是否为结尾
是
指针指向下一个字符
否则
{ 指针指向下一个字符
指针指向的字符的 fp->flag是否被置为EOF}
}
还有fp->flag是什么,感觉有点模糊
希望在座的大佬能指出我的不足之处,万分感谢 展开
展开全部
fp的flag就是一个标志位.
在判断feof的时候只是单纯的返回这个标志位的值,并不会出现读操作.
即
int feof(FILE *fp){ return fp->flag;}
而fp->flag赋值是在其他读操作时赋值的, 包括fgetc, fread, fscanf等等.
所以 只要代码写的正确, 是不会造成多读的.
多读一次 一般都是代码写的不对.
比如
while(!feof(fp))
{
putchar(fgetc(fp));
}
这样就会导致多读一次.因为, 最后一次 fgetc出错, 才赋值flag为1, 这一次读的结果就是无效的.
可是一样执行了putchar, 就导致了多一次.
如果改成
while(1)
{
int c=fgetc(fp);
if(feof(fp)) break;
putchar(c);
}
就没问题了.
追问
while(!feof(fp))
{
putchar(fgetc(fp));
}
fp->flag赋值是在其他读操作时赋值的,所以第一次feof(fp)还没有赋值,所以while会多一次吗。
还有
如果fscanf()和 fprintf(()在一个循环里一起用,会导致上一个字符被输入,下一个字符被输出 ,指针跳到下下个字符吗。
追答
两个都对,就是这样的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询