




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、main()int i,j,t,x10=2,19,8,-10,7,0,89,3,13,50;for(i=0;i9;i+) for(j=i+1;jxj) t=xi,xi=xj,xj=t;for(i=0;i10;i+) printf(%d,xi);getch();首先,看一个熟悉的交换法排序例子:#include main()int i,j,t,x10=2,19,8,-10,7,0,89,3,13,50;FILE *fp;fp=fopen(demo.txt,w);for(i=0;i9;i+) for(j=i+1;jxj) t=xi,xi=xj,xj=t;for(i=0;i10;i+) fprint
2、f(fp,%d,xi);fclose(fp);#include main() int i,j,m,x10; FILE *fp; fp=fopen(demo.txt,r); for(i=0;i10;i+)fscanf(fp,%d,&xi); fclose(fp); m=x0; for(i=0;i10;i+) m=min(m,xi); printf(minimum=%d ,m); getch(); int min(int x,int y) return (xy?x:y);文件可以存放程序或数据;文件是由文件名来识别的,只要指明文件名就可以读出或写入数据;根据数据的组织形式,可以分为两种类型
3、:文本文件(也称ASCII文件):二进制文件两者的区别在于存储数值型数据的方式不同。C语言把文件看作是一个字符(字节)的序列,即由一个一个字符(字节)的数据顺序组成,也就是所谓的流式文件。内 存程序数据区程序数据区输入文件缓冲区输入文件缓冲区输出文件缓冲区输出文件缓冲区磁盘磁盘文件文件缓冲文件系统示意图缓冲文件系统示意图nA file is data stored in secondary storage. This is usual a hard disk connected to the computer bus by means of some interface. nAccessing
4、 data in files is much slower than from memory, but files are more permanent and can be larger.在C语言中,对文件的操作一般分为:打开文件:利用一个文件指针使外部文件与程序之间建立数据交换的可能;使用文件:使用该文件(读或写);关闭文件:切断外部文件与程序之间的联系,并保证文件的完整性。在C语言的程序中是通过一个文件类型指针来使用外部文件。该结构体类型是系统定义的,包含在stdio.h中,取名为FILE。对于每个要操作的文件,用户需先在程序中定义一个指向FILE类型的指针变量,如:FILE *fp;T
5、his pointer, called the file pointer, points to a structure that contains information about the file, such as the location of a buffer, the current character position in the buffer, whether the file is being read or written, and whether errors or end of file have occurred. Users dont need to know th
6、e details, because the definitions obtained from include a structure declaration called FILE. typedef structshortlevel;/ fill/empty level of buffer unsigned flags;/ file status flags charfd;/ file descriptor unsigned char hold;/ ungetc char if no buffer shortbsize;/ buffer size unsigned char buffer;
7、/ data transfer buffer unsigned char curp;/ current active pointer unsignedistemp;/ temporary file indicator shorttoken;/ used for validity checking FILE; / this is the FILE object文件的打开函数:fopen( )fopen()函数为编译系统提供以下信息:需要打开的文件名(filename)使用文件的方式(mode,读还是写等)让哪个指针变量(fp)指向被打开的文件fopen()函数的原型为:FILE *fopen(c
8、har *filename, char *mode)filename指定要打开的文件名,可以为字符串常量或字符串变量mode表示文件的打开方式r :只读w:只写a:追加b:针对二进制文件+:可读可写mode处理方式处理方式指定文件不存在指定文件不存在指定文件存在指定文件存在含含 义义r只读只读出错出错正常打开正常打开以读方式打开一个文本文件以读方式打开一个文本文件w只写只写建立新文件建立新文件文件原有内容丢失文件原有内容丢失以写方式打开一个文本文件以写方式打开一个文本文件a追加追加建立新文件建立新文件在文件原内容后追加在文件原内容后追加以追加方式打开一个文本文件以追加方式打开一个文本文件rb只
9、读只读出错出错正常打开正常打开以读方式打开一个二进制文件以读方式打开一个二进制文件wb只写只写建立新文件建立新文件文件原有内容丢失文件原有内容丢失以写方式打开一个二进制文件以写方式打开一个二进制文件ab追加追加建立新文件建立新文件在文件原内容后追加在文件原内容后追加以追加方式打开一个二进制文件以追加方式打开一个二进制文件r+读写读写出错出错正常打开正常打开以读以读/写方式打开一个文本文件写方式打开一个文本文件w+读写读写建立新文件建立新文件文件原有内容丢失文件原有内容丢失以写以写/读方式打开一个文本文件读方式打开一个文本文件a+读写读写建立新文件建立新文件在文件原内容后追加在文件原内容后追加以
10、读以读/写方式打开一个文本文件写方式打开一个文本文件rb+读写读写出错出错正常打开正常打开以读以读/写方式打开一个二进制文件写方式打开一个二进制文件wb+读写读写建立新文件建立新文件文件原有内容丢失文件原有内容丢失以写以写/读方式打开一个二进制文件读方式打开一个二进制文件Ab+读写读写建立新文件建立新文件在文件原内容后追加在文件原内容后追加以读以读/写方式打开一个二进制文件写方式打开一个二进制文件功能:成功,返回一个指向指定文件的指针。若打开文件不成功,返回空指针NULL。一般为增强程序的可靠性,常用下面的方法打开一个文件: if(fp=fopen(data.txt,r)=NULL) prin
11、tf(can not open this filen); exit(0); 函数原型:stdio.h 。注:对文件操作的库函数,函数原型均在头文件stdio.h中。后续函数不再赘述。stdin:标准输入文件(只读),指向终端输入设备(键盘)。stdout:标准输出文件(只写),指向终端输出设备(显示器)。stderr:标准错误输出文件(读/写),指向终端输出设备(显示器)。使用完一个文件后应该将它关闭,使文件指针变量不再指向该文件(此后不能再通过该指针对文件进行读/写操作)fclose()函数的原型为:int fclose(EILE *fp);功能:执行该函数,若正常关闭,返回零;否则返回非零
12、。当程序运行正常结束时,系统自动关闭所有的标准文件。文件被打开后可以对文件进行操作,文件的读写操作是最常用的文件操作。C语言中文件的读写没有特定的输入输出,它是通过函数来实现的。 文件读与写的操作: 1. 读写文件中的一个字符2. 读写一个字符串3. 读写一个数据块4. 对文件进行格式化读写fputc()函数和 fgetc() 函数fputc()函数原型为:int fputc(char ch, FILE *fp)说明:将ch中的字符输出到fp所指向的文件中;输出成功则返回所输出的字符,失败则返回EOFfgetc()函数原型为:int fgetc(FILE *fp)说明:从fp所指向的文件中读入
13、一个字符;成功则返回所读的字符,如发生错误或读到文件结束符失败则返回EOF#includemain() int ch; FILE *outf, *inf; outf=fopen(demo.txt,r); / 以读方式打开原文本文件 inf=fopen(复件demo.txt,w); / 以写方式打开新文本文件 ch=fgetc(outf); / 从原文件中读出一字符 while(ch!=EOF) / 检查是否到文件尾 fputc(ch,inf); / 将字符ch的值写入到新文件中 ch=fgetc(outf); fclose(outf); / 关闭原文件fclose(inf); / 关闭新文件在
14、对文本文件执行读入操作时,如果遇到文件尾,则读操作函数返回一个文件结束标志EOF(其值在头文件stdio.h中被定义为-1)。库函数feof() (判断是否到文件尾的函数)原型:int feof(FILE *fp);说明:在执行读文件操作时,如果遇到文件尾,则函数返回逻辑真(1);否则,则返回逻辑假(0)。feof()函数同时适用于文本文件和二进制文件。fgets()函数和fputs()函数fgets()函数的原型char *fgets(char *str,int n,FILE *fp);说明:从指定文件中读入一个规定长度(n-1)字符串,存入str中,并在尾端自动加一个结束标志0;同时将读写
15、位置指针向前移动字符串长度个字节。 在读出n-1个字符之前,如遇到了换行符或EOF,则读出结束。fgets函数返回值是字符数组的首地址(指针值)。fputs()函数的原型int fputs(const char *str,FILE *fp);说明将str中的字符串写入fp所指文件中;写入错误,则返回EOF。 #include#include#define N 80 main() char stringN;FILE *outf;outf=fopen(c:demo.txt,r ); /如果要指定路径名,要用双斜杠 while(!feof(outf) / 检查是否到文件尾 fgets(string,
16、N,outf); /从原文件中读出N-1个字符作为一个串放入string中 fputs(string, stdout); /将string中的内容送至标准输出文件流,即在显示器上显示出来 fclose(outf);getch();fread () 函数和 fwrite() 函数fread() 的函数原型unsigned fread(void *buffer, unsigned size, unsigned count, FILE *fp);说明:从fp所指向的文件中将读出每项长度为size的count个数据项,存放到buffer所指向的内存单元开始的存储区中fwrite()的函数原型:unsi
17、gned fwrite(const void *buffer, unsigned size, unsigned count, FILE *fp);说明:将buffer所指向的内存单元开始的内存区中的长度为size的count个数据项写入fp所指向的文件中如果文件以二进制形式打开,用fread()和fwrite()可以读写任何类型的信息。若有 float x10;fread(x,4,10,fp); fread(x,sizeof(float),10,fp);fwrite(x,sizeof(float),10,fp);fread(x,4*10,fp); fread(x,sizeof(float)*1
18、0,1,fp);fwrite(x,sizeof(float)*10,1,fp);struct student char name20; float grade;stu30;for (i=0; i30; i+) fwrite(&stui, sizeof(struct student), 1, fp);for (i=0; i30; i+) fread(&stui, sizeof(struct student), 1, fp);fwrite(stu, sizeof(struct student), 30, fp);fread(stu, sizeof(struct student),
19、30, fp);fscanf()函数和fprintf()函数格式化读取函数fscanf() 的原型int fscanf(FILE *fp, char *format, )说明:从fp所指文件中,按format格式读出系列数据存放到 给出的地址系列中。格式化写入函数fprintf()的原型int fprintf(FILE *fp, char *format, )说明:将中给出的数据系列按format格式写入到fp所指文件中。读写位置指针:文件中有一个读写位置指针,指向当前的读写位置。 每次读写1个(或1组)数据后,系统自动将位置指针移动到下一个读写位置上。 如果想改变系统这种读写规律,可使用有关
20、文件定位的函数。所谓随机读写,是指读完上一个字符后,并不一定要读写其后继的字符,而可以读写文件中任意所需的字符。原型:void rewind(FILE *fp);说明:将文件位置指针复位到文件的首部。即,将fp所指文件的文件位置指针移动到文件起始位置,函数无返回值。原型int fseek(FILE *fp,long offset, int whence);说明:将fp的文件位置指针从whence开始,移动offset个字节,指向下一个要读取的数据的位置。offset:正数则往文件尾移,负数则往文件头移whence: SEEK_SET 或0表示文件的起始位置 SEEK_CUR或1表示文件的当前位
21、置 SEEK_END或2表示文件的终止位置原型:long ftell(FILE*fp);说明:返回文件位置指针的当前位置(用相对于文件头的位移量表示)。若出错返回-1。8.5.1 文件检测函数 1. feof()函数int feof(FILE *fp);说明:判断文件是否处于文件结束位置,如文件结束,则返回值为1,否则为0。当在对文件进行读操作时,为了避免读完文件中数据时,继续对文件进行读取操作,可以通过来检测文件是否结束。在调用输入输出库函数时,如果出错,除了函数返回值有所反映外,也可利用ferror()函数来检测。 原型: int ferror(FILE *fp); 说明: 如果函数返回值为0,表示未出错;如果返回一个非0值,表示出错。对同一文件,每次调用输入输出函数均产生一个新的ferror()函数值。因此在调用了输入输出函数后,应立即检测,否则出错信息会丢失。在执行fopen()函数时,系统将ferr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业员工合伙合同范本
- 个人英文佣金合同范本
- 亮化购货合同范本
- 代理续约合同范本
- 鱼池出租合同范本
- 公司装饰劳务合同范例
- 兼职工作合同范本
- 停止合作合同范本
- 水上安全合同范本
- 做绿化合同范本
- 四年级科学下册课件 第四课 河流和湖泊 冀人版 25张
- 绿色简约墙体商务风PPT模板
- LS/T 1226-2022粮库智能通风控制系统
- GB/T 4927-2008啤酒
- GB/T 462-2003纸和纸板水分的测定
- QC演示:提高检查井周边密实度
- 肺隔离症医学课件
- GB/T 22919.5-2008水产配合饲料第5部分:南美白对虾配合饲料
- 卫生部健康体检项目目录
- 四川甘孜州州属事业单位考调工作人员【共500题含答案解析】模拟检测试卷
- 主要学术成绩、创新点及其科学意义
评论
0/150
提交评论