feof函数的使用

feof函数的使用:不能用feof函数的返回值直接来判断文件是否结束。

feof的作用是:当文件读取结束的时候,判断结束的原因是否是遇到文件尾结束。

判断方法:

文本文件读取是否结束,判断返回值是否是EOF(fgetc),或者NULL(fgets)。

二进制文件的读取结束判断,判断返回值是否小于实际要读的数。

小例:

fgetc读取时返回EOF有两种情况:

1.遇到文件末尾,返回EOF,同时设置一个状态,标志着遇到文件末尾了,使用feof来检测这个状态

2.遇到错误了,返回EOF,同时设置一个状态,标志着遇到错误了,使用feof来检测这个状态。

#include 
#include 
#include 
#include 

int main()
{
	char ch;
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		perror(errno);
		return;
	}
	while ((ch = fgetc(pf)) != EOF)
	{
		putchar(ch);
	}
	printf("\n");
    //判断是什么原因:
	if (ferror(pf))
	//ferror返回1时,判断为遇到错误。
	{
		puts("I/O error when reading\n");
	}
	else if (feof(pf))
	//feof返回非空时,判断为遇到文件尾,正常结束。
	{
		puts("End of file reached successfully\n");
	}
	fclose(pf);
	pf = NULL;
	return 0;
}

二进制文件的例子:

enum { SIZE = 5 };
int main()
{
	double a[SIZE] = { 1.,2.,3.,4.,5.};
	FILE* fp = fopen("test.txt", "wb");//必须用二进制模式
	fwrite(a, sizeof * a, SIZE, fp);
	fclose(fp);
	double b[SIZE];
	fp = fopen("test.txt", "rb");
	size_t ret_code = fread(b, sizeof * b, SIZE, fp);
	if (ret_code == SIZE)
	{
		puts("Array read successfully contents:");
		for (int n = 0; n < SIZE; ++n)
		{
			printf("%c\n", b[n]);
		}
	}
	else if (feof(fp))
	{
		printf("Error reading test.txt:unexpected end of file\n");
	}
	else if (ferror(fp))
	{
		perror("Error reading test.txt");
	}
	return 0;
}

你可能感兴趣的:(c语言)