zoukankan      html  css  js  c++  java
  • 文件,结构体作业

    1.本章学习总结

    1.1 思维导图

    1.2 本章学习体会及代码量学习体会

    这一章的内容,可以说是学习c语言以来,最懵逼的一章的学习。结构体的知识,上课的时候听不懂,还是在练习了几道pta题目才有点了解,尤其是对结构体数组的应用,定义结构体后,如何把数据存入结构体数组中,在练习了题目,以及反复分析书上代码,才知道了如何去存放。文件这一节,我刚开始学习的时候不知道它有什么作用,感觉他好像没什么用处,学习的时候也觉得看上去好像非常简单,就是开文件,对文件进行操作,关文件这几个步骤。实际上运用起来感觉很麻烦,这次的大作业,也是问了好几个同学,关于文件这方面的知识,还有参考书本上的东西,才完成的。过程可以说有点困难,但是后面还是大体上完成了。这次的作业让我明白了书本的代码的重要性,真的很多东西都可以学习书本,比如结构体数组的排序问题,书本上也有类似的代码,文件用户的检验问题,书本上也有,这2部分就解决了这次大作业最难的2部分,所以参考书本,这次的大作业其实也不怎么难完成。再者,我懂得要多问优秀同学,他们很多的东西都学的比我们好,分享他们的学习经验,自己虽然可以简化自己思考过程,但是刚刚开始的时候,如果不多请教,一个人懵懵懂懂的开始工作,效率会很低。我问了他们一些文件的知识,以及参考了他们在构建这个大作业的思路,本来我是想在处理排名的问题上,一个用户写完,就排一次,就写入。问了几个同学,他们都是先写完所有的用户,最后在处理排名,我想了下,后面这种方法,书上也好像有类似的对结构体数组的排序问题,所以就改变了我的排名处理方法。如果用一开始我的想法,可能这次大作业处理起来,没这么顺利了。

    2.大作业


    先把5个用户存储在文件中(没有设计注册新用户的步骤)

    2.1文件介绍:

    1.头文件:

    介绍:
    1.头文件主要定义了结构体student,其中4个变量分别存储用户名,密码,和训练的题目量,还有练习的正确率,
    2.还有定义了6个函数,每个函数的作用分别写在了函数后面。

    2.其他文件介绍

    1.main.c文件

    主函数中
    1.定义了结构题数组。分别存放5个用户的数据。
    定义等级变量rank,用户练习变量num,循环变量I,以及算术式数组exp;
    2.设计思路:输入用户名,密码,调用函数checkUsers,根据返回值1/0判断用户是否合法,不合法一直提醒用户输入。
    输入合法后,调Begin函数,生产友好界面,并提醒用户输入等级和练习数量,之后用户输入等级和练习题目数量。
    把结构体的地址,算术式数组地址,等级,练习数量,传入生成运算符,计算函数CreateExp中。
    3.等所有用户都完成练习后,调用Rank函数把上面所有的结构体数组中的数据进行排序。
    4.最后把排序后的结构体调用一个printfRank函数,写入文件中。

    截图:

    2.userschcck.c文件

    这个文件主要放了判断用户合法性和放了一个生成界面的函数。
    判断合法性函数参考书本:
    1.定义3个字符数组,把输入的用户和密码,分别存入,并且用函数去连接起来,
    2.在把原来use文件中的用户和密码用fgets读到一个字符数组中。
    3.把这2个字符数组比较,相同就返回1;不同就说明用户不合法,返回0;

    截图:

    3.CreateExp.c文件

    根据上次大作业生成运算符并且其中调用计算函数计算出结果,代码都一样没有变化;
    这次这个文件函数加了一步赋值:

    把运算正确率,和练习的题目,存入结构体数组中,便于排序和写入文件。

    4.ComputeExp.c文件

    代码还是上次作业的代码:
    判断是否为数字字符,是进行m语句的运算。
    否则就一定是运算符,分情况进行运算。

    截图:

    由于结果其余函数要用,所以设计了返回值,

    5.writeRank.c文件

    这个文件放了2个函数,排序函数,和把结果读入文件中的函数;
    排序函数主要运用选择法,把之前存好的结构体数组的地址传入,用选择法根据正确率的大小排序。
    读入文件的函数:
    定义文件指针,开文件,用循环fprintf写入排序好的结构体数组。

    截图:

    2.2.运行结果

    登录:判断用户合法性的运行截图:


    根据用户文件用户1对应的密码是A,所以显示不合法。要求重新输入:

    再次输入1和A符合用户和密码,启动运算软件。

    用户1:

    用户2:

    用户3:

    用户4:

    用户5:

    2.所有用户运算结束,打开排名文件:

    2.3改进大作业总结和碰到问题及解决办法:

    改进这次大作业,基本上对文件的处理有个大体的了解了,可以熟练的掌握了文件的读写,还学习到了检验用户合法性,和结构体数组排序的方法,这2个种思路在处理结构体问题中,应该是比较常用。这次的大作业,还巩固了我对结构体数组的认识,而且考验了我对函数传参数的认识,由于这次的代码分了好几块,所以在处理上就必须考虑好每一块之间的连接问题,就是函数的传参数的问题。参数怎么传,传对了才可以连接好每一块的代码,在这个连接上,也是我这次处理大作业的最大困难。比如:

    这个函数,我一开始是这样传:

    试了很多遍,运行不了,我去问了同学,同学告诉我要这样传:

    我就有点不解。我记得结构体数组明明是可以直接传数组名,为啥这里要带上&符号?

    还有赋值这里,我一开始是想用过一个函数:把这几个数据通过函数参数传进去,从函数里面去赋值,但是在传参数的时候又遇见了问题:


    为什么这里又是传s,不是&s。我很难理解,所以就直接取消了这个函数,直接在后面:

    这样也成功的把数据存到结构体了。
    主要是这2个地方的连接,花了很长时间,其余的连接,还是很顺利。排序函数,打印文件函数简单的用结构体的数组名传入就行。

    2.小结

      分装文件,最主要的是连接问题,每个文件如何的接好,这个问题处理好,成功了一大半,这也是最难的。很多功能,由于一开始自己的能力有限,没有去思考,希望这次作业后,对文件结构体有所了解的基础上,以后的类似问题,能够扩展一些不一样的功能。
  • 相关阅读:
    RHEL7: How to configure a rc-local service
    安装 jemalloc for mysql
    aws rhel 7 安装GUI ,配置VNC
    官方推荐的MySQL参数设置值
    Linux HugePages及MySQL 大页配置
    Linux Transparent Huge Pages 对 Oracle 的影响
    Linux的Transparent Hugepage与关闭方法
    Linux HugePages 配置与 Oracle 性能关系说明
    How To Change Log Rate Limiting In Linux
    MySQL 8.0窗口函数
  • 原文地址:https://www.cnblogs.com/zhouqb/p/10201000.html
Copyright © 2011-2022 走看看