1.本章学习总结
1.1思维导图
1.2本章学习体会
在这一章的学习中,我了解到了结构体在C语言中的初步运用,利用结构体来将多个变量统一起来,有利于变量之间的传递交互,也学会了将结构体与指针结合起来,提高函数之间的传递效率。
除此之外,还学习了文件方面的知识,懂得了如何将数据存储到文件里面,和从文件中读取数据,由此来实现更多有趣的功能,如游戏系统的排名,账户的登陆和注册等等。
2.大作业
2.1文件介绍
1.头文件
我将头文件的名字命名为counter.h,在这个头文件里,我定义了两个结构体类型
Details :该结构体用于最后排名的信息存储,其中包括用户的昵称,正确题目数量,选择的难度等级,正确率,以及作答的日期。
User :该结构体用于登陆系统的验证,其中包括用户的昵称,以及密码。
2.其他文件介绍
文件1:main.c
文件功能:
1.调用其他文件的函数,实现目标功能。
2.定义变量,并通过指针的形式传送到各个函数中去,进行计算。思路:利用while循环不断重复表达式的制造与验证函数,达到重复做题的目的,再在中间插入一些功能性函数,丰富体验
截图:
文件2:Login.c
文件功能:
1.对注册用户登记并写入user.txt文件
2.对登陆用户验证login函数思路:
1.首先对文件进行检测,如果user.txt文件不存在,就引导用户注册,存在就以只读打开。
2.读入用户输入的用户名以及密码,对输入长度的限制,原本想使用fgets来限制长度,后来发现当长度达不到规定长度时,会把回车也读进去,影响到后面排名的展示,所以干脆自己写了一段代码来使用。
3.再从文件中逐个读取用户数据与先前用户输入的数据进行比较,判断是否正确,是就放行。Register函数思路:
1.该函数比较简单,采用同login一样的输入方式,将读取的数据追加在user.txt文件的末尾,直接以该用户登陆。
2.在用户输入完昵称后,将在用户文件中进行查找,看是否用户名已存在。menu函数思路:
该函数主要是对前两个函数的整合,并调用Messagebox函数对用户的选择进行判断,这样做有一个好处就是规避了采用输入菜单时的不规范输入。
对函数的返回值判断就可以知道用户的选择。截图:
文件3:ComputeExp.c
文件功能:
1.依照等级创作表达式,传入IsExp函数判断
2.判断表达式是否正确,并去除前导零
3.开始游戏,先计算结果并记录时间,在用户输入完毕后判断答案是否正确,是否超时。ComputeExp函数思路:
先将数字和字符全部提取出来,然后依据运算符的优先级分情况讨论,结果存储在number[0]并返回
GameStart函数思路:
1.调用函数计算结果,在用户输入前后进行对比和判决。
2.将正确与否的结果存储到right和total变量当中。
3.在输入方面插入一些代码优化用户体验IsExp函数思路:
1.将所有数和运算符提取出来,对除法的情况进行判断,看有没有除以0或者除不尽的情况,有的话对除数进行重构。
2.将修改完的数据存储到表示中。截图:
文件4:ranking.c
文件功能:
将用户最后的成绩与ranking.txt文件中的历史成绩进行排名,并将前10输出到控制台,然后把这些结果存储到ranking.txt文件中
rank函数思路:
1.先将ranking.txt的数据读取出来存储到一个结构体数组里面。
2.把用户成绩与历史成绩对比插入并输出到控制台。
3.把数据存储到ranking.txt文件截图:
2.2运行结果
1.登录界面
2.排名结果
2.3改进大作业总结
1.碰到问题及解决办法
1.在读取昵称的时候,fgets会连同回车一并读取咋整?
动手写一个读取,只读六个字符,末尾补 \0 ,遇到回车就结束,将回车换为 \0 ,并且清除缓存区。
2.在将日期转换为字符串后,当下一个名次没有人时,会把这一行的回车当做上一行的字符输入到文件中,导致在不断的读取输入后,会出现排版错乱?
在读取数据时挨个读取,如果遇到空数据就直接跳出循环,不再从文件里读取数据。
3.获取系统日期时总是少了八个小时,这咋整?
经百度查询,需要矫正时区,但是我的方法比较简单粗暴,在时间变量上直接加上86060,这也只是缓兵之计,以后还是应该用矫正时区的函数来矫正。
2.小结
在今后的学习中,百度很重要,不管是遇到问题,还是自己想拓展功能,都可以先求助百度,在这个互联网高速发展的时代,尤其是作为计算机学子的我们,更应该运用好百度这个大数据搜索工具,来获取我们需要的知识,不管是优快云还是博客园,都有大量资料。平时在vs上面出现错误提示时,都会有一段错误代码,像这种东西就是让我们在出现问题又不知道如何解决时,能有地方可以找。