- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
北大裘宗燕《从问题到程序》第九章结构和其他数据机制.ppt
第九章结构和其他数据机制 考虑输入 应定义为函数,由它填充一个ACCITEM结构的数组 为使同一函数能适应各种输入源,可引进一个文件指针参数,用下面原型: int readall(FILE *fp, int limit, ACCITEM accbook[]); 使定义方便,可以增加一个基本账目项输入函数: int readitem(FILE *fp, ACCITEM *ip); 需要用结构指针参数,将实际结构地址传递给函数。 readitem输入可能出现几种情况:1)正常完成一项读入;2)出错;3)已读完所有数据。让readitem在这集中情况下分别返回1,0和-1。readall的读入循环可以写成: while (1) { switch(readitem(fp, accbook[i])) { case 1: ++i; continue; case 0: ... /* 处理输入出错 */ continue; case -1: } break; } /*有许多其他写法,例如用if语句*/ readitem的简单实现: int readitem(FILE *fp, ACCITEM *ip) { int n = fscanf(fp, %d%d%d %s %lf, ip-year, ip-month, ip-day, ip-outline, ip-amount); return n==5 ? 1 : n==EOF ? -1 : 0; } 注意,假设了帐目条目对应于输入行,readitem里的输入错误处理也应反映输入行的概念 不应企图在这里给出错误信息或重新输入(按照设计,处理这些事项是readall的责任) 实现交互的主函数(驱动程序): int main(void) { int n, inum = 0; ACCITEM accbk[NACC]; initialization(); /*系统的初始化处理(可能有)*/ while ((n = getcommand()) = 0) { switch (n) { case 0: /* 要求账目文件名并读入 */ inum = readfile(NACC, accbook); break; case 1: /* 计算最终余额 */ balance(inum, accbook); break; … … … default: errmessage(); break; } } finalization(); /*系统终止处理(可能有)*/ return 0; } 开始调用initialization完成启动准备,如输出一些信息,介绍程序的使用。最后的finalization完成退出前的处理。如果增加有关一次执行所处理的文件总统计信息,可能就要增加一些全局变量,由上述函数完成其初始化和最后统计输出。 getcommand应输出提示信息并读入用户命令,返回命令编码。可能采用各种方式。实现时要考虑处理用户错误输入,这里用的方式是命令错误时返回某个大数,当用户要求结束时返回负数。 readfile完成与输入有关的所有工作,返回实际输入的账目条数。工作包括:要求账目文件名,处理文件无法正常打开情况,调用readall实际读入等。 errmessage()输出错误信息,应对本程序的使用方式给出一些提示。 其他函数完成的工作很明确,函数定义作为练习。还可以根据自己的考虑扩充这个系统。 日期用3个整数表示有缺点:比较不方便,用3个整数表示也浪费空间。可考虑用如下结构: typedef struct { unsigned long date; /*年月日 */ char outline[LINELEN]; /*项目简记 */ double amout; /*金额 */ } ACCITEM; 帐目项读入函数改为: int readitem(FILE *fp, ACCITEM *ip) { int y, m, d; int n = fscanf(fp, %d%d%d %s %lf, y, m, d, ip-outline, ip-amount); if (n != 5) return n == EOF ? -1 : 0; ip-date = y*10000 + m*100 + d; return 1; } 其中的年、月、日很容易提取。例: m = (i
您可能关注的文档
最近下载
- 绵阳南山2025年高中自主招生数学真卷 .pdf VIP
- 学生公寓引进社会化服务安装自助吹风机项目147.docx
- 粤语学习必威体育精装版最全教程.ppt VIP
- 2025上海市六年级升七年级暑假数学衔接讲义 第32讲 图形的运动 暑假综合检测二(解析版)(1).docx VIP
- 压力容器制造质量保证手册+程序文件+表格-符合TSG 07-2019特种设备质量保证管理体系.pdf
- 深海鱼油(syt)课件.ppt
- 《做温暖的教育者》读书分享+课件.pptx VIP
- GB50907-2013 抗爆间室结构设计规范.docx VIP
- 部编版语文一年级上册第八单元教材解读大单元集体备课.pptx VIP
- 大功率充电中压直挂充电技术的发展.pdf VIP
文档评论(0)