自定义类型(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修改一条日志统计支出统计收入
ZJI发布了一款7月份特别促销独立服务器:香港邦联四型,提供65折优惠码,限量30台(每用户限购1台),优惠后每月520元起。ZJI是原来Wordpress圈知名主机商家:维翔主机,成立于2011年,2018年9月启用新域名ZJI,提供中国香港、台湾、日本、美国独立服务器(自营/数据中心直营)租用及VDS、虚拟主机空间、域名注册等业务。下面列出这款服务器的配置信息。香港邦联四型CPU:2*E5-2...
华纳云(HNCloud Limited)是一家专业的全球数据中心基础服务提供商,总部在香港,隶属于香港联合通讯国际有限公司,拥有香港政府颁发的商业登记证明,保证用户的安全性和合规性。 华纳云是APNIC 和 ARIN 会员单位。主要提供数据中心基础服务、互联网业务解决方案, 以及香港服务器租用、香港服务器托管、香港云服务器、美国云服务器,云计算、云安全技术研发等产品和服务。其中云服务器基于成熟的 ...
2022年春节假期陆续结束,根据惯例在春节之后各大云服务商会继续开始一年的促销活动。今年二月中旬会开启新春采购季的活动,我们已经看到腾讯云商家在春节期间已经有预告活动。当时已经看到有抢先优惠促销活动,目前我们企业和个人可以领取腾讯云代金券满减活动,以及企业用户可以领取域名优惠低至.COM域名1元。 直达链接 - 腾讯云新春采购活动抢先看活动时间:2022年1月20日至2022年2月15日我们可以在...
缓存文件写入失败为你推荐
快递打印如何快递打印快递单在线漏洞检测求免费的漏洞扫描工具拂晓雅阁有什么网站是学电脑技术的`?百度抢票浏览器现在火车票越来越难买了,新版百度手机浏览器,除了抢票外,还有什么其他功能吗?百度手写百度如何手写:正则表达式javajava正则表达式唱吧电脑版官方下载唱吧有电脑版吗qq怎么发邮件怎么发送QQ邮件奇虎论坛奇虎论坛最新推荐歌曲列表·免费免费建站我想建一个自己的免费网站,但不知道那里有..
宿迁服务器租用 qq空间域名 什么是二级域名 罗马假日广场 linode日本 z.com 哈喽图床 gateone 174.127.195.202 酷番云 江苏双线服务器 上海电信测速网站 备案空间 西安主机 电信主机托管 九零网络 最新优惠 web是什么意思 免费网站加速 reboot 更多