C知识扫盲-------文件结束符(EOF)

引言:

在文件操作中,EOF 是 “End of File”(文件结束)的缩写,用于指示文件的结束。EOF 是一个特殊的整型值(int),当文件指针到达文件末尾时,许多文件操作函数会返回这个值。

1. feof 函数

feof 函数用于检查文件指针是否到达文件的末尾。它常与循环结合使用,以确保在读取文件时处理文件结束的情况。

示例

FILE *fp = fopen("example.txt", "r");  // 打开文件
if (fp == NULL) 
{
    perror("打开文件时发生错误");  // 如果文件打开失败,打印错误信息
    return -1;  // 返回错误代码
}

char buffer[100];
while (fgets(buffer, 100, fp) != NULL)
{  
 	// 逐行读取文件内容
    printf("%s", buffer);  // 打印读取的内容
}

if (feof(fp))
{  
 	// 检查是否到达文件末尾
    printf("已经到达文件末尾。\n");
} 
else 
{
    printf("在到达文件末尾之前发生错误。\n");
}

fclose(fp);  // 关闭文件

2. fgetc 函数和 EOF

fgetc 函数用于从文件中读取一个字符。当到达文件末尾时,fgetc 会返回 EOF,这通常用于结束读取循环。

示例

FILE *fp = fopen("example.txt", "r");  // 打开文件
if (fp == NULL) 
{
    perror("打开文件时发生错误");  // 如果文件打开失败,打印错误信息
    return -1;  // 返回错误代码
}

int ch;
while ((ch = fgetc(fp)) != EOF) 
{  
	// 逐个字符读取文件内容,直到到达文件末尾
    putchar(ch);  // 打印读取的字符
}

fclose(fp);  // 关闭文件

3. fscanf 函数和 EOF

fscanf 函数用于从文件中读取格式化输入。当读取操作到达文件末尾时,fscanf 会返回 EOF,这可用于判断读取是否完成。

示例

FILE *fp = fopen("example.txt", "r");  // 打开文件
if (fp == NULL)
{
    perror("打开文件时发生错误");  // 如果文件打开失败,打印错误信息
    return -1;  // 返回错误代码
}

int num;
while (fscanf(fp, "%d", &num) != EOF) 
{  
	// 按格式读取文件内容,直到到达文件末尾
    printf("读取的数字: %d\n", num);  // 打印读取的数字
}

fclose(fp);  // 关闭文件

4. fgets 函数和 EOF

fgets 函数用于从文件中读取一行字符串。当读取操作到达文件末尾时,fgets 会返回 NULL,这可以用于判断文件读取是否结束。

示例

FILE *fp = fopen("example.txt", "r");  // 打开文件
if (fp == NULL)
{
    perror("打开文件时发生错误");  // 如果文件打开失败,打印错误信息
    return -1;  // 返回错误代码
}

char buffer[100];
while (fgets(buffer, 100, fp) != NULL) 
{  
	// 逐行读取文件内容,直到到达文件末尾
    printf("%s", buffer);  // 打印读取的内容
}

fclose(fp);  // 关闭文件

5. 错误处理与 EOF

在读取文件时,可能会遇到错误。使用 feof 和 ferror 函数可以分别检测文件是否到达末尾以及是否发生读取错误。

示例

FILE *fp = fopen("example.txt", "r");  // 打开文件
if (fp == NULL)
{
    perror("打开文件时发生错误");  // 如果文件打开失败,打印错误信息
    return -1;  // 返回错误代码
}

char buffer[100];
while (fgets(buffer, 100, fp) != NULL) 
{  
	// 逐行读取文件内容
    printf("%s", buffer);  // 打印读取的内容
}

if (feof(fp)) 
{  
	// 检查是否到达文件末尾
    printf("已经到达文件末尾。\n");
} 
else if (ferror(fp)) 
{  
	// 检查是否发生读取错误
    printf("读取文件时发生错误。\n");
}

fclose(fp);  // 关闭文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值