对文件的输入输出——谭浩强版总结

对文件的输入输出

  1. 源程序文件(后缀为.c),目标文件(后缀为.obj),可执行文件(后缀为.exe)

  2. FILE的头文件#include<stdio.h>

  3. FILE *fp;
    if((fp=fopen("file","r"))==NULL){		//NULL的值为0,在头文件stdio.h中
    	cout<<"ERROR!";
    	exit(0);							//exit函数在头文件stdlib.h中
    }
    fclose(fp);
    
  4. 怎样向文件读写字符

    fgetc(fp);			//读失败返回文件结束标志EOF(-1)
    fputc(ch,fp);		//读失败返回文件结束标志EOF(-1)
    
  5. ch=fgetc(in);
    while(!feof(in)){
    	fputc(ch,out);
    	ch=fgetc(in);
    }
    

    while(!feof(in))等价于while(ch!=-1)等价于while(ch!=EOF)

  6. putc和fputc作用是一样的;getc和fgetc作用是一样的;

  7. 怎样向文件读写一个字符串

    fgets(str,n,fp);	//从fp指向的文件读入一个长度为n-1的字符串,存放到字符数组str中
    					//读成功,返回地址str,失败返回NULL
    fputs(str,fp);		//输出成功,返回0;否则返回非0值
    
  8. 打开磁盘文件fp=fopen("D:\\CC\\string.dat","w")

  9. fgets函数规定:读入字符串时,如果遇到’\n’就结束字符串输入,’\n’作为最后一个字符页读入到字符数组。

  10. 用格式化的方式读写文本文件(花费时间较多,最好不用)

    fprintf(文件指针,格式字符串,输出列表);
    fscanf(文件指针,格式字符串,输入列表);
    
  11. 用二进制方式向文件读写一组数据

    fread(buffer,size,count,fp);		//从文件中读一个数据块
    fwrite(butter,size,count,fp);		//向文件写一个数据库
    /*如果函数fread和fwrite执行成功,则函数返回值为count*/
    
    /*从fp1中读入数据块,向fp2写入数据块*/
    struct Student{
    	char name[10];
    	int num;
    	double score;
    }stu[10];
    for(int i=0;i<10;++i)
    	fread(&stu[i],sizeof(struct Student),1,fp1);
    for(int i=0;i<10;++i)
    	fwrite(&stu[i],sizeof(struct Student),1,fp2);
    
  12. 用rewind函数使文件位置标记指向文件开头,此函数无返回值

  13. 用fseek函数改变文件位置标记:fseek(文件类型指针,位移量,起始点)

    0(SEEK_SET)表示“文件开始位置”;1(SEEK_CUR)表示“当前位置”;2(SEEK_END)表示”文件末尾位置“。

    **位移量是long型数据(**在数字的末尾加一个字母L)

    fseek(fp,100L,0);		//将文件位置标记向前移动到离文件开头100个字节处
    fseek(fp,50L,1);		//将文件位置标记向前移动到离当前位置50个字节处
    fseek(fp,-10L,2);		//讲文件位置标记从文件末尾处向后退10个字节
    
    /*读入奇数学生数据*/
    struct Student{
    	char name[10];
    	int num;
    	double score;
    }stu[10];
    for(int i=0;i<10;i+=2){
    	fseek(fp,i*sizeof(struct Student),0);
    	fread(&stu[i],sizeof(struct Student),1,fp);
    }
    
  14. 用ftell函数测定文件位置标记的当前位置(用相对于文件开头的位移量来表示)

    如果调用函数时出错(如文件不存在),ftell函数的返回值为-1L

    i=ftell(fp);
    if(i==-1L) cout<<"ERROR!";
    
  15. 在调用各种输入输出函数时,如果出现错误,可以用ferror函数检查。调用形式ferror(fp)

    如果返回值为0,表示未出错;否则表示出错

    对同一个文件每一次调用输入输出函数,都会产生一个新的ferror函数值。因此,应在调用一个输入输出函数后立即检查ferror函数的值

    在执行fopen函数时,ferror函数的初始值自动置为0

  16. clearerr函数的作用是使文件出错标志和文件结束标志置为0

    假如在调用一个输入输出函数时出现错误,ferror函数值为一个非零值。应立即调用clearerr(fp)

    只要出现文件读写出错标志,它就一直保留,直到对同一文件调用clearerr函数或rewind函数或任何其它一个输入输出函数

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枯木何日可逢春

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值