feof()函数在文件操作时,用于判断文件是否结束。如果文件结束,则返回非0值,否则返回0。
对于文件来说,无论是空文件,还是存有信息的文件。文档的结尾都有一个隐藏字符”EOF”,意思就是end of file,指示文件的结束字符。
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
FILE *p;
if ((p = fopen("D:\\Users\\ASUS\\Desktop\\a123.txt", "rb"))==NULL)
{
printf("%s\n","can not open file");
exit(0);
}
//getc(p);
if (feof(p))
{
printf("file is empty.");
}
else
{
printf("file is not empty.");
}
return 0;
}
这里输出结果始终是file is not empty.因为无论文件有无内容,都会存在EOF字符。feof函数的指针ptr始终在文件的开头第一个字符往后看是否有内容,看到了EOF所以判断文件不为空。
正确的做法是指针往后移1位。跳过EOF。采用getc()函数。因为其读取第一个字符之后指针后移一位。
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
FILE *p;
if ((p = fopen("D:\\Users\\ASUS\\Desktop\\a123.txt", "rb"))==NULL)
{
printf("%s\n","can not open file");
exit(0);
}
getc(p);
if (feof(p))
{
printf("file is empty.");
}
else
{
printf("file is not empty.");
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
FILE *p;
if ((p = fopen("D:\\Users\\ASUS\\Desktop\\asd.txt", "rb"))==NULL)
{
printf("%s\n","can not open file");
exit(0);
}
getc(p);
if (feof(p))
{
printf("file is empty.\n");
}
else
{
printf("file is not empty.\n");
rewind(p);//将指针跳回到文件开头第一个字符
int a;
//p = fopen("D:\\Users\\ASUS\\Desktop\\asd.txt", "r");
fscanf(p,"%ld",&a);//读取文本里存的数并显示出来
printf("%d", a);
}
return 0;
}
读取全部的文件内容并打印出来
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
FILE *p;
if ((p = fopen("D:\\Users\\ASUS\\Desktop\\asd.txt", "rb"))==NULL)
{
printf("%s\n","can not open file");
exit(0);
}
getc(p);
if (feof(p))
{
printf("file is empty.\n");
}
else
{
printf("file is not empty.\n");
rewind(p);//将指针跳回到文件开头第一个字符
int a;
while(1)
{
a = fgetc(p);
if(feof(p))
{
break ;
}
printf("%c", a);
}
}
return 0;
}