C语言feof很简单问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 23:14:24
========代码如下==========
char buf[100]
FILE *fp
while(!feof(fp))
{
fgets(buf,100,fp);
printf("%s",buf);
}
====================
当语句第一次执行到while时候feof检测到第一个字符不是末尾,继续执行下面代码,fgets(buf,100,fp)这时候,fgets是读取文件fp里的一个字符,还是一次性全部读取,如果每次读取一个字符那么假如里面有100个字符者循环100次,但如果是一次性读取的话他只循环一次,第二次执行while时候feof直接检测到末尾退出!
到底是一次读取一个字符,还是一次行读取,还是其他读取模式

fgets 读一行,包括new-line键。

用 feof(fp) 测定是否读到EOF 这个判断应当在 读语句 后面再做。

许多人把它放在 while(!feof(fp)) 里做 实际上是不正确的(最后一次输出有问题):
while(!feof(fp))
{
。。。。
printf("%s",buf);
}

应当:
while( 1==1 )
{
// 读语句 在此,
fgets(buf,100,fp);
// 接着判断。
if (feof(fp)) break;
printf("%s",buf);
}

// 简单办法:
while( 1==1 )
{
if (fgets( buff,100, fp) ==NULL) break; // 这样判断EOF简单
printf("%s",buf);
}

fgets应该是每次读取一行
遇到 /r/n,/n,或者到文件末尾都会停止。