§9.4文件的读写函数 ★字符I/O函数:fputc-与fgetc 冬fputc ●函数调用:fputc(ch,fp) ●功能:把一字节代码ch写入f指向的文件中 ●返值:正常,返回ch;出错,为EOF fgetc ●函数调用:ch=fgetc(fp) ●功能:从文件指针所指向的文件中读取一个字节代码 ●返值:正常,返回读到的代码值:读到文件尾或出错为EOF 文件I/0与终端I/0 #define putchar(c) fputc(c,stdout) #define getchar() fgetc(stdin)
§9.4 文件的读写函数 字符I/O函数: fputc与fgetc ❖fputc ⚫函数调用:fputc(ch, fp) ⚫功能:把一字节代码ch写入fp指向的文件中 ⚫返值:正常,返回ch;出错,为EOF ❖fgetc ⚫函数调用:ch=fgetc(fp) ⚫功能:从文件指针fp所指向的文件中读取一个字节代码 ⚫返值:正常,返回读到的代码值;读到文件尾或出错为EOF 文件I/O与终端I/O #define putchar( c ) fputc(c,stdout) #define getchar( ) fgetc(stdin)
例从键盘输入字符,逐个 .#include <stdio.h 存到磁盘文件中,直到main0 输入‘#“为止 FILE *in,*out; char ch,infile[10],outfile[10]; scanf("%s",infile); scanf("%s",outfile); 例读文本文件内容, if ((in=fopen(infile,"r"))==NULL) 并显示 printf("Cannot open infile.n"); exit(O); +例文件拷贝 if((out=fopen(outfile,"w"))==NULL) feof printf("Cannot open outfile.\n"); ●函数原型:lnt exit(O); ●功能:判断文件 ●返值:文件结 while (feof(in)) fputc(fgetc(in),out); fclose(in);fclose(out);
判断二进制文件是否结束 while(!feof(fp)) { c=fgetc(fp); . } 例 文件拷贝 例 从键盘输入字符,逐个 存到磁盘文件中,直到 输入‘#“为止 例 读文本文件内容, 并显示 #include <stdio.h> main() { FILE *fp; char ch,*filename=“out.txt”; if((fp=fopen(filename,”r"))==NULL) { printf("cannot open file\n"); exit(0); } while((ch=fgetc(fp))!=EOF) putchar(ch); fclose(fp); } ❖feof ⚫函数原型:int feof(FILE *fp) ⚫功能:判断文件是否结束 ⚫返值:文件结束,返回真(非0);文件未结束,返回0 #include <stdio.h> main() { FILE *fp; char ch,*filename=“out.txt”; if((fp=fopen(filename,"w"))==NULL) { printf("cannot open file\n"); exit(0); } printf("Please input string:"); ch=getchar(); while(ch!='#') { fputc(ch,fp); putchar(ch); ch=getchar(); } fclose(fp); } 将字符ch存入fp所指的文件中 将字符ch显示的屏幕上 获得一个字符存入ch 中 #include <stdio.h> main() { FILE *in, *out; char ch,infile[10],outfile[10]; scanf("%s",infile); scanf("%s",outfile); if ((in = fopen(infile, "r"))== NULL) { printf("Cannot open infile.\n"); exit(0); } if ((out = fopen(outfile, "w"))== NULL) { printf("Cannot open outfile.\n"); exit(0); } while (!feof(in)) fputc(fgetc(in), out); fclose(in); fclose(out); }
★数据块I/0:fread与fwr ite 冬函数调用: fread(buffer,size,count,*fp) fwrite(buffer,size,count,*fp) 功能:读写数据块 返值:成功时返回读/写的块数;出错或到文件尾返回0 说明: ●buffer:指向要输入/输出数据块的首地址的指针 ●size:每个要读/写的数据块的大小(字节数) ●count:要读/写的数据块的个数 ●fp:要读/写的文件指针(对文件指fp所指的文件进行读写 操作)。 ●fread-与fwrite一般用于二进制文件的输入/输出
数据块I/O:fread与fwrite ❖函数调用: fread(buffer, size, count, *fp) fwrite(buffer, size, count, *fp) ❖功能:读/写数据块 ❖返值:成功时返回读/写的块数;出错或到文件尾返回0 ❖说明: ⚫buffer:指向要输入/输出数据块的首地址的指针 ⚫size:每个要读/写的数据块的大小(字节数) ⚫count:要读/写的数据块的个数 ⚫fp: 要读/写的文件指针(对文件指针fp所指的文件进行读写 操作)。 ⚫fread与fwrite 一般用于二进制文件的输入/输出
例 float f[2]; FILE *fp; fp=fopen(“aa.dat”,“rb); for(i=0;i<2;i++) fread(f,4,2,fp); fread(&f[i],4,1,fp); 例struct student int num; char name[20]; char sex; int age; float score[3]; }stud[10]; for(i=0;i<10;i++) fread(&stud[i],sizeof(struct student),1,fp);
例 float f[2]; FILE *fp; fp=fopen(“aa.dat”,“rb”); fread(f,4,2,fp); for(i=0;i<2;i++) fread(&f[i],4,1,fp); 例 struct student { int num; char name[20]; char sex; int age; float score[3]; }stud[10]; for(i=0;i<10;i++) fread(&stud[i],sizeof(struct student),1,fp);