EOF
EOF是<stdio.h>中的宏定义,EOF(End Of File)是一个与标准输入/输出流相关联的标志位。当文件指针已经指向文件尾且再次尝试读取时,EOF标志会被设置。同时,某些函数会在读取到文件尾(即EOF标志被设置)时返回EOF作为标识。
/* Buffered I/O macros */
#define BUFSIZ 515
// ......
#define EOF (-1)
// ......在操作系统中,文件以文件存储占用的扇区数作为文件大小的计数单位,故而如果文件的大小不能恰好填满存储文件的最后一个扇区,则需要对该扇区剩余的空间进行填充,过去填充使用的是值为26(0x1a)的字节,也就是某些系统中 Ctrl+Z 的对应码值。
EOF 函数
getchar()
getchar()的返回值与EOF进行比较,如果不相同,说明还没有到达文件结尾。
在Unix系统中,可以通过在一行开始键入Ctrl+D来从键盘模拟文件结束条件;windows系统则使用Ctrl+Z来达到这个目的。
while ((ch = getchar ()) != EOF)scanf()
scanf()函数返回一个整数值,这个值是成功读取的项目数,或者当遇到文件结束时返回一个EOF(文件结尾符)。
while (scanf ("%d", &n) != EOF)fclose()
fclose()函数 如果成功返回 0,否则返回EOF(-1)。
getc()
如果读入字符时发现已经到达文件结尾,getc()会返回一个特殊值EOF。
int ch;
FILE * fp;
fp = fopen ("abc.txt", "r");
while ((ch = getc (fp)) != EOF)
{
putchar (ch);
}feof()
int feof(FILE * stream);
会检查与文件对应流的eof( end of file )标志是否被设置,如果被设置则返回非零值,如未被设置,则返回0。
#include<stdio.h>
int main(void)
{
FILE *ptr = fopen("a.txt","r");
if(!ptr)
{
printf("打开文件失败!\n");
return -1;
}
char ch;
int count = 0 ;
while(!feof(ptr)) //检测到EOF标志则停止
{
count++;
ch = fgetc(ptr);
printf("%c",ch);
}
printf("%5d",count);
printf("\n");
fclose(ptr);
return 0;
}