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()等。

原文地址:https://www.cnblogs.com/larrylawrence/p/4389291.html