C语言高级语言程序设计(一)第六章 高级程序设计.ppt
《C语言高级语言程序设计(一)第六章 高级程序设计.ppt》由会员分享,可在线阅读,更多相关《C语言高级语言程序设计(一)第六章 高级程序设计.ppt(56页珍藏版)》请在三一办公上搜索。
1、高级语言程序设计(一)(C Programming),第六讲:高级程序设计,本章目标,掌握文件结束判断方法;掌握文件格式化输入/输出方法;了解文件块输入/输出方法;了解文件读写位置操作。熟悉预处理语句;了解变量作用域;了解位运算;,文件输入/输出(复习),文件输入/输出过程,打开文件,首先在程序文件的头部应有如下语句:#include,stream(流,读写通道),程序结束前应该关闭文件,!,程序,文件,打开文件(复习),例如:以只读方式打开一个文件“hello.c”。fp=fopen(“hello.c”,“r”);例如:以写方式打开一个文件“output.dat”,该将文件位于C:盘根目录下
2、。fp=fopen(“c:output.dat”,“w”);,读写文件(复习),字符输入函数:int fgetc(FILE*fp);从fp所指向的文件中读取一个字符并返回。若文件结束或调用失败,返回EOF字符输出函数:int fputc(int ch,FILE*fp);将字符ch写入fp所指向的文件。若成功,则返回写入的字符;若失败,返回EOF,关闭文件(复习),关闭文件函数:int fclose(FILE*fp);关闭fp文件指针所指向的文件,并释放fp文件指针。若成功关闭,返回0,否则返回EOF,例:将文件in.doc拷贝至新文件out.doc中。,#include void main()
3、char ch;FILE*in,*out;if(in=fopen(in.doc,r)=NULL)printf(Cant open in.doc!);return;if(out=fopen(out.doc,w)=NULL)printf(Cant open out.doc!);return;while(ch=fgetc(in)!=EOF)fputc(ch,out);fclose(in);fclose(out);,结果:不能正确读取in.doc!,?,打开文件(续)*,文本文件与二进制文件例:整数 1949(0 x079d),使用printf%d输出,C语言支持文本形式和二进制形式的文件操作,无论那
4、种形式,都把文件看作一个字节的序列,对文件的存取是以字节为单位进行的。,1 9 4 9,文本文件便于显示,二进制文件节省存储空间,处理速度快,一般用于保存大量数据。,文件,打开文件(续)*,以二进制流打开文件的方式包括:“rb”:表示读;“wb”:表示写;“ab”:表示添加;“rb+”:表示读写已有文件;“wb+”:表示读写新文件;“ab+”:表示读及添加;,文件结束判断,在二进制文件中不设EOF标志(因为-1为合法数据),文件结束测试函数:feof(fp);若最近一次读取fp所指向的文件时,读取了文件尾部,则返回非0值,否则返回0,文件结束判断(续),test.txt:abc,int cou
5、nt=0;int ch;while(!feof(fp)fgetc(ch,fp);count+;,count值:,1,ch值:,a,2,b,3,c,尾部:最后一个字节后,4,-1,#include void main()char ch;FILE*in,*out;if(in=fopen(in.doc,rb)=NULL)printf(Cant open in.doc!);exit(1);if(out=fopen(out.doc,wb)=NULL)printf(Cant open out.doc!);exit(1);ch=fgetc(in);while(!feof(in)fputc(ch,out);c
6、h=fgetc(in);fclose(in);fclose(out);,这种文件读写方法可用于任何类型的文件,包括文本文件,能否改成:while(!feof(in)ch=fgetc(in);fputc(ch,out);,问题6.1,问题:UNIX下有一个命令cat,其用法为:cat x.c y.c z.c 其在标准输出(屏幕)上依次显示每个文件内容。如果没有文件名,则显示标准输入中的内容。它类似于Windows的Command环境下的type命令。,问题6.1:算法设计,主要算法如下:If 没有命令行参数从标准输入中读取内容并显示到屏幕上;Else While 还有文件未读取 打开文件;从文件
7、输入中读取内容并显示到屏幕上;关闭文件;,设计一个函数:void filecopy(FILE*fp)从文件或标准输入中输入并显示到屏幕上。,问题6.1:代码实现,#include void filecopy(FILE*fp);int main(int argc,char*argv)FILE*fp;int i=1;if(argc=1)filecopy(stdin);else while(iargc)if(fp=fopen(argvi+,“r”)=NULL)printf(“cat:cant open%sn”,*argv);return 1;else filecopy(fp);fclose(fp);
8、return 0;,void filecopy(FILE*fp)int c;while(c=fgetc(fp)!=EOF)fputc(c,stdout);,错误处理及出口,出错时可调用exit(1),非正常出口。一般正常退出可调用exit(0)。函数exit为每个打开的文件调用fclose,清除缓冲区,再通过系统调用命令_exit退出。,错误处理及出口(续),对上例cat程序可作如下修改。main(int argc,char*argv)FILE*fp;if(argc=1)filecopy(stdin);elsewhile(-argc 0)if(fp=fopen(*+argv,“r”)=NULL
9、)printf(“cat:cant open%sn”,*argv);return 1;else filecopy(fp);fclose(fp);return 0,fprintf(stderr,“cat:cant open%sn”,*argv);exit(1);,exit(0);,exit函数通常用于当存在多层函数调用时退出程序。,行输入/输出,char*fgets(char*s,int n,FILE*fp)从fp上最多读入n-1个字符,放入s 字符数组中。返回s或NULL。int fputs(char*s,FILE*fp)把字符串s(不一定含n)写入文件fp中。返回非负数或EOF。fgets正
10、常读入换行字符(与gets不同);fputs不在输出后自动加换行字符(与puts不同);fgets能设置字符的最大个数,因此,当无法确定所读入的数据行有多长时,最好使用fgets,而不用gets。如:fgets(buf,81,stdin);,while(fgets(s,81,fp)!=NULL),文件格式化输入/输出,文件格式化输入/输出函数:fscanf(fp,format,)fprintf(fp,format,)比scanf、printf函数分别多了一个文件指针参数。,例如:从文件student.in中读入最多不超过50个学生的学生信息,分别以姓名顺序(从低到高)将学生信息输出到文件stu
11、dent.out中。,41 lisan 2245 wang 2354 liu 20110 zhang 19,返回成功读入的数据个数,若到达文件末尾或转换出错,则返回EOF,文件格式化输入/输出(程序实例),int main()struct student stu50;int number,i;FILE*in,*out;in=fopen(studentin.in,r);out=fopen(studentout.out,w);fscanf(in,%d,struct student int id;char name7;int age;,文件格式化输入/输出,举例:读入文件中的单词(假如单词数不超过1
12、00,每个单词长度不超过100个字符)问题分析:1、如何判断是否读完?利用fscanf的返回值,若大于0,则未读完,否则,读完或读入错误。2、如何保存读入的单词?char words100101;char*pwords100;,文件,读入单词:,char words100101;int i=0;while(fscanf(in,%s,wordsi)0)i+;,char*pwords100,temp101;int i=0;while(fscanf(in,%s,temp)0)pwordsi=(char*)malloc(strlen(temp)+1);strcpy(pwordsi,temp);i+;,
13、读写文件(续),其它文件读写常用函数:getc(fp),putc(c,fp)而getc,putc和fgetc,fputc的区别是fgetc和fputc是函数,而getc和putc是宏定义。,块输入/输出,size_t fwrite(const void*ptr,size_t size,size_t nobj,FLE*fp)从指针ptr所指的对象中,向文件fp中写入大小为size的nobj个对象。其返回值为实际写入的对象数。size_t fread(void*ptr,size_t size,size_t nobj,FILE*fp)从文件fp中读入大小为size的nobj个对象,放入指针ptr所指
14、的对象中。其返回值为实际读入的对象数。通常它们被用来输入或输出象结构这样的成块数据。如:fwrite(buf,sizeof(struct student),n,fp);fread(buf,sizeof(struct student),n,fp);,块输入/输出(续),注意:块输入/输出又称直接输入/输出,不进行数据格式的转换,因此属于二进制流形式的输入/输出操作。用fwrite函数写入数据的文件,其内容一般无法用普通的编辑器查看或修改。一般用于保存数据,为了以后重新读取使用。fwrite和fread函数一般配对使用:用fwrite写入的数据一般通过fread函数读取;用fread读取的数据也一
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言高级语言程序设计一第六章 高级程序设计 语言 高级 语言程序设计 第六 程序设计
链接地址:https://www.31ppt.com/p-2932531.html