自定义类型(typedef):1.
自定义类型(typedef):将C语言中的已有类型(包括已定义过的自定义类型)重新命名新的名称可以代替已有数据类型常用于简化对复杂数据类型定义的描述typedef;自定义类型(typedef)typedef;typedefintINTEGER;inti,j;INTEGERi,j;typedefint*POINTER;int*p1;POINTERp1;自定义类型(typedef)的使用方法定义变量inti变量名新类型名intINTEGER加上typedeftypedefintINTEGER用新类型名定义变量INTEGERi;定义一个数组类型:IntArrayinta[10];intIntArray[10];typedefintIntArray[10];IntArraya;inta[10];Chap12文件12.
1将短句"HelloWorld"写入到文件12.
2读取学生成绩文件12.
3文件复制12.
4文件综合应用:个人小金库的管理本章要点什么是文件C文件是如何存储的什么是文本文件和二进制文件怎样打开、关闭文件怎样编写文件读写程序怎样编写程序,实现简单的数据处理12.
1将短句"HelloWorld"写入到文件例12-1把短句"HelloWorld!
"保存到磁盘文件f1.
txt中.
#include#includeintmain(void){FILE*fp;/*定义文件指针*/if((fp=fopen("f1.
txt","w"))==NULL){/*打开文件*/printf("Fileopenerror!
\n");exit(0);}fprintf(fp,"%s","HelloWorld!
写文件*/if(fclose(fp)){/*关闭文件*/printf("Cannotclosethefile!
\n");exit(0);}return0;}例12-1源程序12.
1.
2文件的概念文件:保存在外存储器上的一组数据的有序集合特点:数据长久保存数据长度不定数据按顺序存取12.
1.
3文本文件和二进制文件C语言中的文件是数据流文件的两种数据形式:ASCII码(文本文件textstream)字符流二进制码(二进制文件binarystream)二进制文件是直接把内存数据以二进制形式保存.
例如,整数1234文本文件保存:49505152(4个字符)二进制文件保存:04D2(1234的二进制数)12.
1.
4缓冲文件系统内存单元数据……文件磁盘速度慢,直接把数据写到磁盘效率很低12.
1.
4缓冲文件系统向磁盘输出数据:数据缓冲区,装满缓冲区后磁盘文件.
从磁盘读入数据:先一次性从磁盘文件将一批数据输入到缓冲区,然后再从缓冲区逐个读入数据到变量.
数据……缓冲器512字节……文件由操作系统自动完成程序控制内存单元内存单元缓冲文件与文件类型指针用文件指针指示文件缓冲区中具体读写的位置FILE*fp;fp同时使用多个文件时,每个文件都有缓冲区,用不同的文件指针分别指示.
typedefstruct{shortlevel;unsignedflags;……}FILE;第242页FILE:结构类型用typedef定义,在头文件中typedefstruct{shortlevel;/*缓冲区使用量*/unsignedflags;/*文件状态标志*/charfd;/*文件描述符*/shortbsize;/*缓冲区大小*/unsignedchar*buffer;/*文件缓冲区的首地址*/unsignedchar*curp;/*指向文件缓冲区的工作指针*/unsignedcharhold;/*其他信息*/unsignedistemp;shorttoken;}FILE;2.
文件结构-FILE3.
文件类型指针FILE*fp指向文件缓冲区,通过移动指针实现对文件的操作fp同时使用多个文件时,每个文件都有缓冲区,用不同的文件指针分别指示.
如何使fp与具体文件挂钩12.
2读取学生成绩文件例12-2已知一个数据文件f.
txt中保存了5个学生的计算机等级考试成绩,包括学号、姓名和分数,文件内容如下,请将文件的内容读出并显示到屏幕中.
301101张文91301102陈慧85301103王卫东76301104郑伟69301105郭温涛5512.
2.
1程序解析#include"stdio.
h"intmain(void){FILE*fp;/*定义文件指针*/longnum;charstname[20];intscore;if((fp=fopen("f.
txt","r"))==NULL){/*打开文件*/printf("Fileopenerror!
\n");exit(0);}while(!
feof(fp)){fscanf(fp,"%ld%s%d",&num,stname,&score);printf("%ld%s%d\n",num,stname,score);};if(fclose(fp)){/*关闭文件*/printf("Cannotclosethefile!
\n");exit(0);}}12.
2.
1程序解析#include"stdio.
h"intmain(void){FILE*fp;/*定义文件指针*/longnum;charstname[20];intscore;if((fp=fopen("f.
txt","r"))==NULL){/*打开文件*/printf("Fileopenerror!
\n");exit(0);}while(!
feof(fp)){fscanf(fp,"%ld%s%d",&num,stname,&score);printf("%ld%s%d\n",num,stname,score);};if(fclose(fp)){/*关闭文件*/printf("Cannotclosethefile!
\n");exit(0);}}fopen("文件名字符串","打开方式字符串")使文件指针与相应文件实体对应起来程序对文件指针进行操作,即fp代表磁盘文件函数fopen()的返回值执行成功,则返回包含文件缓冲区等信息的FILE型地址,赋给文件指针fp不成功,则返回一个NULL(空值)exit(0):关闭所有打开的文件,并终止程序的执行参数0表示程序正常结束;非0参数通常表示不正常的程序结束文件打开方式fp=fopen("f.
txt","r")文件打开方式参数表文件读写与打开方式if读文件指定的文件必须存在,否则出错;if写文件(指定的文件可以存在,也可以不存在)if以"w"方式写if该文件已经存在原文件将被删去重新建立;else按指定的名字新建一个文件;elseif以"a"方式写if该文件已经存在写入的数据将被添加到指定文件原有数据的后面,不会删去原来的内容;else按指定的名字新建一个文件(与"w"相同);if文件同时读和写使用"r+"、"w+"或"a+"打开文件12.
2.
1程序解析#include"stdio.
h"intmain(void){FILE*fp;/*定义文件指针*/longnum;charstname[20];intscore;if((fp=fopen("f.
txt","r"))==NULL){/*打开文件*/printf("Fileopenerror!
\n");exit(0);}while(!
feof(fp)){fscanf(fp,"%ld%s%d",&num,stname,&score);printf("%ld%s%d\n",num,stname,score);};if(fclose(fp)){/*关闭文件*/printf("Cannotclosethefile!
\n");exit(0);}}12.
2.
3关闭文件if(fclose(fp)){printf("Cannotclosethefile!
\n");exit(0);}fclose(文件指针)把缓冲区中的数据写入磁盘扇区,确保写文件的正常完成释放文件缓冲区单元和FILE结构体,使文件指针与具体文件脱钩.
函数fclose()的返回值返回0:正常关闭文件返回非0:无法正常关闭文件12.
3文件复制例12-3已知一个文本数据文件f1.
txt,请将该文件复制一份,保存为f2.
txt.
新建一个文本文件f1.
txt,将该文件与源程序放在同一目录下,执行程序,观察结果.
例12-3源程序#includeintmain(void){FILE*fp1,*fp2;charc;if((fp1=fopen("f1.
dat","r"))==NULL){printf("Fileopenerror!
\n");exit(0);}if((fp2=fopen("f2.
dat","w"))==NULL){printf("Fileopenerror!
\n");exit(0);}while(!
feof(fp1)){c=fgetc(fp1);fputc(c,fp2);}fclose(fp1);fclose(fp2);return0;}打开多个文件if((fp1=fopen(f1.
dat,"r"))==NULL){printf("Fileopenerror!
\n");exit(0);}if((fp2=fopen("f2.
dat","w"))==NULL){printf("Fileopenerror!
\n");exit(0);}C语言允许同时打开多个文件不同的文件对应不同的文件指针不允许同一个文件在关闭前再次打开文件读写函数字符读写函数:fgetc/fputc字符串读写函数:fputs/fgets格式化读写函数:fscanf/fprintf二进制读写函数:fread/fwrite其他相关函数:检测文件结尾函数feof检测文件读写出错函数ferror清除末尾标志和出错标志函数clearerr文件定位的函数fseek12.
3.
2字符读写函数fgetc和fputcwhile(!
feof(fp1)){c=fgetc(fp1);fputc(c,fp2);}函数fputc()fputc(ch,fp);把一个字符ch写到fp所指示的磁盘文件上返回值-1(EOF):写文件失败ch:写文件成功字符读写函数fgetc和fputc函数fgetc()ch=fgetc(fp);从fp所指示的磁盘文件上读入一个字符到ch区分键盘字符输入函数getchar()从键盘输入10个字符,写到文件f2.
txt中,再重新读出,并在屏幕上显示验证.
键盘输入写入文件f2.
txt读文件屏幕显示的过程键盘输入f2.
txt时,文件按写方式打开.
f2.
txt显示到屏幕时,文件按读方式打开.
读和写是两种不同的操作,f2.
txt分别被打开和关闭两次.
例12-4源程序intmain(void){inti;charch;FILE*fp;if((fp=fopen("f2.
txt","w"))==NULL){/*打开文件f2.
txt*/printf("Fileopenerror!
\n");exit(0);}for(i=0;i0){/*表示有记录存在*/fseek(cfptr,size*(logcount-1),SEEK_SET);/*定位最后记录*/fread(&log,size,1,cfptr);/*读取最后记录*/printf("Thelastlogis:\n");printf("logid:%-6ld\nlogdate:%-11s\nlognote:%-15s\n",log.
logid,log.
logdate,log.
lognote);printf("charge:%-10.
2lf\nbalance:%-10.
2lf\n",log.
charge,log.
balance);}elseprintf("nologsinfile!
\n");}增加日志voidAddNewLog(FILE*cfptr)/*添加新记录*/{structLogDatalog,lastlog;longlogcount;printf("Inputlogdate(format:2006-01-01):");scanf("%s",log.
logdate);printf("Inputlognote:");scanf("%s",log.
lognote);printf("InputCharge:Income+andexpend-:");scanf("%lf",&log.
charge);logcount=getLogcount(cfptr);/*获取记录数*/增加日志if(logcount>0){fseek(cfptr,size*(logcount-1),SEEK_SET);fread(&lastlog,size,1,cfptr);/*读入最后记录*/log.
logid=lastlog.
logid+1;/*记录号按顺序是上次的号+1*/log.
balance=log.
charge+lastlog.
balance;}else{/*如果文件是初始,记录数为0*/log.
logid=1;log.
balance=log.
charge;}fseek(cfptr,0L,SEEK_END);/*rewind(cfptr);*/printf("logid=%ld\n",log.
logid);fwrite(&log,sizeof(structLogData),1,cfptr);/*写入记录*/}计算日志个数longgetLogcount(FILE*cfptr)/*获取文件记录总数*/{longbegin,end,logcount;fseek(cfptr,0L,SEEK_SET);begin=ftell(cfptr);fseek(cfptr,0L,SEEK_END);end=ftell(cfptr);logcount=(end-begin)/size;returnlogcount;}Anymoreoperations修改一条日志统计支出统计收入
青果云香港CN2_GIA主机测评青果云香港多线BGP网络,接入电信CN2 GIA等优质链路,测试IP:45.251.136.1青果网络QG.NET是一家高效多云管理服务商,拥有工信部颁发的全网云计算/CDN/IDC/ISP/IP-VPN等多项资质,是CNNIC/APNIC联盟的成员之一。青果云香港CN2_GIA主机性能分享下面和大家分享下。官方网站:点击进入CPU内存系统盘数据盘宽带ip价格购买地...
蓝竹云怎么样 蓝竹云好不好蓝竹云是新商家这次给我们带来的 挂机宝25元/年 美国西雅图云服务器 下面是套餐和评测,废话不说直接开干~~蓝竹云官网链接点击打开官网江西上饶挂机宝宿主机配置 2*E5 2696V2 384G 8*1500G SAS RAID10阵列支持Windows sever 2008,Windows sever 2012,Centos 7.6,Debian 10.3,Ubuntu1...
星梦云怎么样?星梦云资质齐全,IDC/ISP均有,从星梦云这边租的服务器均可以备案,属于一手资源,高防机柜、大带宽、高防IP业务,一手整C IP段,四川电信,星梦云专注四川高防服务器,成都服务器,雅安服务器。星梦云目前夏日云服务器促销,四川100G高防4H4G10M月付仅60元;西南高防月付特价活动,续费同价,买到就是赚到!点击进入:星梦云官方网站地址1、成都电信年中活动机(成都电信优化线路,封锁...
缓存文件写入失败为你推荐
网络明星哪个知道这个网络明星叫什么?windows优化大师怎么用windows优化大师怎么用﹖暴风影音怎么截图怎么截取暴风影音图片中国论坛大全有谁知道国内人气最高的论坛排行榜?自助建站自助建站哪个平台最好?不兼容安卓手机软件不兼容怎么办?qq空间装扮qq空间的装扮空间在哪?网易公开课怎么下载如何将网易公开课下载到电脑上?迅雷云点播账号求迅雷云播账号ios系统ios系统有哪些版本?
出租服务器 免费二级域名申请 免费域名解析 cybermonday 高防dns 美国主机代购 iisphpmysql 火车票抢票攻略 40g硬盘 网站卫士 qq金券 服务器论坛 cdn服务 聚惠网 godaddy域名 热云 tko cc攻击 远程主机强迫关闭了一个现有的连接 kosskeb4 更多