feof函数的正确使用

   在文件读取的过程中,feof函数经常被误用来判断文件是否结束。

   但其实她是被应用于当文件读取结束的时候,判断是读取失败结束,还是遇到文件的结尾而结束

   正因为如此feof函数常常与ferror函数配合使用。

feof函数使用cplusplus相关链接:

https://cplusplus.com/reference/cstdio/feof/?kw=feof

具体使用又分为以下两种情况:

1.文本文件读取结束的判断

(1)判断fgetc返回的值是否为EOF

(2)判断fgets返回的值是否为NULL

int main()
{
	int a;//int,要求处理EOF
	FILE* pf = fopen("test.txt", "r");
	if (pf == EOF)
	{
		perror("open");
		return 1;
	}
	//fgetc失败时返回EOF
	while ((a = fgetc(pf)) != EOF)
	{
		putchar(a);
	}
	//失败原因判断
	if (ferror(pf))
	{
		printf("读取失败结束\n");
	}
	else if (feof(pf))
	{
		printf("遇到文件的结尾而结束\n");
	}
	fclose(pf);
	pf = NULL;
	return 0;
}

2. 二进制文件读取结束的判断

判断fread返回值是否小于要读的个数

#define SZ 3
int main()
{
	int arr1[SZ] = { 1,2,3 };
	FILE* pf = fopen("test.txt", "wb");
	fwrite(arr1, sizeof(arr1[0]), SZ, pf);
	fclose(pf);

	int arr2[SZ];
	pf = fopen("test.txt", "rb");
	size_t a = fread(arr2, sizeof(arr2[0]), SZ, pf);
	if (a == SZ)
	{
		int i = 0;
		for (i = 0; i < SZ; i++)
		{
			printf("%d ", arr2[i]);
		}
		printf("\n");
	}
	else
	{
		if (ferror(pf))
		{
			printf("读取失败结束\n");
		}
		else if (feof(pf))
		{
			printf("遇到文件的结尾而结束\n");
		}
	}
	fclose(pf);
	pf = NULL;
	return 0;
}

 总之,feof函数只是用来判断遇到文件尾结束,判断失败的原因还得交给ferror函数。

用feof函数的返回值来判断文件是否结束更是一个错误。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值