主要有四种:
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()等。