• C语言文件读写总结


    主要有四种:

    1.文件的字符输入输出函数 fgetc fputc
    2.文件的字符串输入输出函数 fgets fputs
    3.文件的格式化输入输出函数 fscanf fprintf
    4.文件的数据块输入输出函数 fread fwrite

    1.文件的字符输入输出函数 fgetc fputc

    fgetc从文件读取一个字符数据:

    c = fgetc (fp);
    

    fputc将一个字符写入指定文件:

    fputc(c,fp);
    

    例子:

    //从f_src.txt将数据逐个读出,将其中数字删除后写入文件f_dst.txt
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        char c;
        FILE *fp1, *fp2 ;
        if((fp1 = fopen("f_src.txt","r"))==NULL)
        {
            printf("cannot open the file.
    ");
            exit(0);
        }
        if((fp2 = fopen("f_dst.txt","w"))==NULL)
        {
            printf("cannot open the file.
    ");
            exit(0);
        }
        while(!feof(fp1))//判断文件是否到结尾
        {
            c=fgetc(fp1);
            if(!(c>='0'&&c<='9'))
                fputc(c,fp2);
            printf("%c",c);
        }
        fclose(fp1);
        fclose(fp2);
    
    }

    2.文件的字符串输入输出函数 fgets fputs

    fgets读取字符串:

    fgets(str,n,fp);//从fp指向的文件中读取n-1个字符,加字符串结束标志后送str,返回字符串首地址
    

    将字符串写入文件:

    fputs(str,fp);
    

    例子:

    #include <stdio.h>
    #include <stdlib.h>
    
    //从键盘读取字符串保存到string.txt,仅输入回车时结束
    int main()
    {
        FILE *fp;
        char str[30];
        if((fp=fopen("string.txt","w"))==NULL)
            {printf("error");exit(0);}
    
        printf("input sth
    ");
        //char str2 = strlen(gets(str));
        while(strlen(gets(str))>0)
           {
               fputs(str,fp);
               fputc('
    ',fp);
           }
        fclose(fp);
    
    }

    3.文件的格式化输入输出函数 fscanf fprintf

    例子:

    //在student.txt中存放了10个学生的成绩,计算平均成绩保存到stu_aver.txt
    #include <stdio.h>
    #include <stdlib.h>
    #define N 10
    int main()
    {
        float average(int *p , int num );
        int i = 0 , score[N];
        FILE *fp = fopen("student.txt","r");
    
        //int d;
        //while(scanf("%d", &d) != EOF )
        //    score[i ++] = d;
        float aver;
        for(i=0;i<N;i++)
            fscanf(fp,"%d,",&score[i]);
        fclose(fp);
        int count;
        for(count = 0 ; count <N ; count++)
            {printf("%d",score[count]);
            printf("
    ");
            }
        aver = average(score,N);
        FILE *fp2 = fopen("average.txt","w");
        fprintf(fp2,"%.lf",aver);
        fclose(fp2);
    
    }
        float average(int *p,int num)
        {
            int i , sum ;
            float aver ;
            sum = 0 ;
            for(i=0 ; i <num ; i ++)
                sum += *(p+i);
            aver = sum*1.0/num;
    
        FILE *fp3 = fopen("sum.txt","w");
        fprintf(fp3,"%d",sum);
        fclose(fp3);
    
        return aver;
        }

    4.文件的数据块输入输出函数 fread fwrite

    #include <stdio.h>
    #include <stdlib.h>
    /*fread(buffer,size,count,fp);
      buffer是指针变量,表示读出的数据在内存中的起始地址
      size表示数据项的字节长度
      count表示要读取的数据项的个数
      fp指向一个已经打开的待读文件
      函数返回从文件中读取的数据项数
    
      fwrite(buffer,size,count,fp);
    */
    //从键盘输入三条通讯录记录(姓名+电话),写入tel.txt,再读出这些数据显示在屏幕上
    
    #define N 3
    struct person
    {
        char name[20];
        long int no ;
    };
    int main()
    {
        struct person per[N],*p;
        FILE *fp;
        int i ;
        p = per ;
        if((fp = fopen("tel.txt","w"))==NULL)
        {
            printf("error opening file
    ");
        }
        printf("input data:
    ");
        for(i = 0 ; i < N ; i++ , p++)
            scanf("%s%ld",p->name,&p->no);//p->name代表数组name首地址本身就是地址了所以不用加&
    
        /*结构体数组的初始化:
          输入zhangsan 123↙
          lisi 234↙
          wangwu 456↙
          之后,相当于给结构体数组这样初始化:
          struct person per[3]=
          {
            {"zhangsan",123},
            {"lisi",234},
            {"wangwu",456}
          };
        */
    
        fwrite(per,sizeof(struct person),N,fp);
        rewind(fp);//将文件指针移动到文件头部
        p = per ;
        fread(p,sizeof(struct person),N,fp);
        for(i = 0 ; i <N ; i ++ , p++)
            printf("%s	%ld
    ",p->name, p->no);
        fclose(fp);
    }

     其他文件函数还有ftell() rewind() fseek() ferror() clearerr()等。

  • 相关阅读:
    【重学计算机】计组D2章:数据表示
    【重学计算机】计组D1章:计算机系统概论
    计算机底层原理杂谈(白话文)
    阿里云安装wordpress遇到的问题
    wordpress数据表结构
    家用计费系统ER图
    java 类中的属性为什么一般都是私有的
    centos 软件库安装
    linux下启动tomcat----Cannot find ./catalina.sh
    jfreechart图表汉字乱码问题解决方案
  • 原文地址:https://www.cnblogs.com/larrylawrence/p/4389291.html
Copyright © 2020-2023  润新知