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;
}

标签: c/c++

添加新评论