feof()函数的文件操作

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;
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值