1.本章学习总结

1.1 学习内容总结

  • 结构体如何定义、成员如何赋值:
1.常见的定义:
struct student
{
int num;
char name[20];
}stu;
//2.采用typedef
typedef struct
{
int num;
char name[20];
}STU;
STU stu; //对于赋值,需对指定成员进行赋值
//如 1.
stu.num=5;
//此外,也可以直接对结构体赋值
//如
STU stu1,stu2;
stu1=stu2;
  • 结构体数组排序做法:
//首先要定义结构体数组:

//对于上述1:
struct student
{
int num;
char name[20];
}stu[20]; //上述2:
//只需加上
STU stu[20]; //对于排序,通常是对结构体中某一成员进行对比。同样分为选择法和冒泡法,只是对比的成员的表示形式变了而已。。与其他不同的是,结构体可以赋值。
  • 结构体指针怎么用:
//多是在调用函数时使用。此做法可降低传参的代价。

//常见定义为:(以第一条中的结构为例)
//1. struct student*();
//2. STU *();
  • 共用体、枚举类型做法:
//对于枚举,最常见的无非是如下类似的代码:
enum week{ Mon, Tues, Wed, Thurs, Fri, Sat, Sun };
//其中Mon到Sun依次从0开始赋值,即Mon=0;
//类似于#define Mon 0; //共用体:
//使用同一段内存单元存放不同类型的变量,或者说使几个不同的变量共享同一段内存的结构,称为“共用体”类型的结构,声明与定义如下:
union Data{
int n;
char ch;
double f;
};
union Data a, b, c;
//其使用和结构体相似,但是初始赋值只能赋一个变量的值;
//注意:
//共用体占用的内存等于最长的成员占用的内存。同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。
  • 文件读写,文件中数据如何读进结构体数组:
//对文件进行操作,最先需要的即是打开文件:
FILE *fp;
fp=fopen("文件名.txt","r+(此为操作方式)");
//对于格式对齐的文件,将文件每一行数据存入一数组中
//对于输入的方法也有多种
fscanf(fp,"%s %d",name,&num);
fgets(s,n,fp);
//在通过对具体要求对数据进行处理在赋值到结构体;

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

1.2.1 学习体会

  • 不是很难,只是刚开始对结构进行了解时有一些困惑,不过题目做着就迎刃而解了。

1.2.2 代码累计

  • 就把PTA中结构题题目都做了,以及平常布置的作业。相对于标准也应是不会太多,但也不会少。

2.综合作业--“我爱成语”

2.1.文件介绍

1.头文件介绍

idiom.h

  • 具体的功能我都注释出来了,就不再详述了。
  • 代码截图

2.函数实现文件介绍。

文件1:成语Main.cpp

  • 主要功能:打开成语数据文件,并存入成语结构数组中。另外使用循环实现重复游戏。
  • 代码截图

文件2:idiom.cpp

  • 主要函数:(输出及菜单函数不做解释)
1.int GetIdiom(FILE* fp, IDIOM* number);//其功能为:获取成语数据并存入成语结构体数组,并返回成语的个数。


2.int Login(IDIOM*number, int num); //功能:判断用户输入的用户及密码是否正确,会提示用户名错误或密码错误,并且只有五次机会。当输入正确时,将进行游戏。




3.int ConsultIdiom(FILE* fp, IDIOM* number,int num); //功能 : 查询字典,目前仅支持精确查询。


4.void IdiomGame(IDIOM*number,int num,char* name);//功能 : 进行出题,题型仅有随机的挖两个空。并计算得分后储存排名。
* ** 我这里的出题通过两个随机数完成**
* ** 由于成语均是四个字以上,所以我只考虑前四字的挖空。**
* ** 前四个字在数组中占 0 1 2 3 4 5 6 7,所以我随机两个0或1的随机数。一个控制前两个字的挖空,一个控制后两个字的挖空**
* ** 前一个随机数通过if (position1 = rand() % 2)position1++; 将其值控制为0 或 2,出题时将ask[position]跟ask[position+1]赋值为'_'即可**
* ** 后一个随机数通过position2 = ((rand() % 2) + 2) * 2; 将其值控制为4 或 6,出题同上。




5.SCORE* Updaterank(FILE*fpRc,char *name1, int mark1, int* usernumber); //功能 : 更新排名,在idiom函数中使用。这里用到了sprintf()函数,简单来讲,其就是将整数转为字符串。由于我排名结构中分数是为字符数组。所以我需要用到该函数。


6.SCORE* Getrank(int *num,SCORE*rank);//功能 : 获取排名信息。


2.2运行结果

1.登录界面

2.游戏界面

3.排名界面


2.3大作业总结

遇到的问题

  • 1.储存的用户名即密码跟用户输入的用户名密码会差一个'\n',导致用户密码错误。后来统一改用fgets。
  • 2.在出题的地方卡了有一会儿,位置的想法错了几次,不过最后列草稿还是写出来了。
  • 3.输出排名地方不知道为什么传回的结构指针中的内容没错,但一写入文件就乱了。一直在改,前后也忘了改了什么了,总之是解决了。

小结

  • 这次的大作业相比于上次思路更清晰,并且写起代码来也比较轻松,可能是因为各格式比上次认真了不少,我觉得这也算是一种进步把。

c博客06-2019-结构体&文件的更多相关文章

  1. C语言博客作业6---结构体&文件

    C语言博客作业6---结构体&文件 1.本章学习总结(2分) 1.1思维导图 请以思维导图总结本周的学习内容.如下图所示: 1.2.学习体会 描述本周学习感受,也可以在这里提出你不理解地方.对 ...

  2. C语言博客作业06--结构体&文件

    1.本章学习总结 1.1思维导图 1.2.本章学习体会 这是这学期最后一次博客园作业,文件和结构体感觉比指针还难,一直搞不是很懂,大作业没有方向感,现在还在搞,大作业没有成品,只能先去借鉴舍友的优秀代 ...

  3. C博客作业06--结构体&文件

    1.本章学习总结 1.1思维导图 1.2本章学习体会 学习了结构和文件,又是懵懵的课了,我的天啊.结构还好,题目集一出就做了,不是很难,感觉掌握的还可以,不过这只是感觉而已,等到真正来写大作业的时候又 ...

  4. C语言博客作业06——结构体&文件

    C语言博客作业06--结构体&文件 1.本章学习总结 1.1思维导图 1.2.本章学习体会 在本周的学习中,我们学习了关于结构体和文件的内容.结构体的本身并不难,但以结构体为基础的链表还是让我 ...

  5. C语言文件读写(结构体文件)

    有时候,我们需要将输入的数据存储起来,这时候就需要用到文件,对于C语言而言,文件的读写有多种方式,下面主要是结构体文件的读写,例如student.dat(第一列是学号,第二列是姓名) xiaoming ...

  6. c语言博客作业--结构体&文件

    1.本章学习总结 1.1思维导图 1.2.本章学习体会 本章学到了结构体如何构建,用typedef进行重定义结构体,结构指针,访问结构体的方式等. 文件:文件的读取,文件读写的几个函数,基本了解了文本 ...

  7. c语言第六次作业---结构体&文件

    1.本章学习总结 1.1思维导图 1.2学习体会 这次应该是本学期最后一次博客了,总结一下这个学期的学习,一开始就基础薄弱还一直畏难一直懒惰,不想去解决问题导致后面问题越来越多就觉得学习越来越难,后面 ...

  8. [js高手之路]Node.js+jade抓取博客所有文章生成静态html文件

    这个周末,恶补了一下jade模板引擎,就为生成静态html文件,这篇文章需要知道jade以及看过我的上篇文章,我先给出他们的参考链接: [js高手之路]Node.js模板引擎教程-jade速学与实战1 ...

  9. Flutter 即学即用系列博客——06 超实用 Widget 集锦

    本篇文章我们来讲讲一些比较常用的 Widget. 大家验证的时候使用下面的代码替换 main.dart 代码,然后在 //TODO 语句返回下面常用 Widget 示例的代码. import 'pac ...

  10. [New!!!]欢迎大佬光临本蒟蒻的博客(2019.11.27更新)

    更新于2019.12.22 本蒟蒻在博客园安家啦!!! 本蒟蒻的博客园主页 为更好管理博客,本蒟蒻从今天开始,正式转入博客园. 因为一些原因,我的CSDN博客将彻底不会使用!!!(带来不便,敬请谅解) ...

随机推荐

  1. Solr搜索引擎【索引管理】

    一.索引存储 当文档提交到索引之后,directory目录组件会将它们写入到持久化存储器.Solr的目录组件具有以下重要特点: 1.隐藏持久存储的读写细节,例如,将文档写入到磁盘或通过JDBC在数据库 ...

  2. 生活小插曲(长篇连载,持续更新ing)^_^

    这个帖子,长期记录一些小小的生活插曲 在北京朋友开店了-关于同学开快餐店的故事.今天下午听说这个朋友在附近开了一个店,下午5点多吧,出门去他那里去了.走路过去的.在那里聊了将近一个小时吧.对最近我们自 ...

  3. 关于javascript中=的返回值

    今天看了一段代码,大概是这样的: function test(){ a=4; b=5; return b=a; } test();//返回? 返回值是多少呢?运行结果是4 这可以理解为将a的值赋给b以 ...

  4. C#程序编写高质量代码改善的157个建议【13-15】[为类型输出格式化字符串、实现浅拷贝和深拷贝、用dynamic来优化反射]

    前言 本文已更新至http://www.cnblogs.com/aehyok/p/3624579.html .本文主要学习记录以下内容: 建议13.为类型输出格式化字符串 建议14.正确实现浅拷贝和深 ...

  5. 宝塔面板的数据库连接本地Navicat Premium

    把宝塔面板的数据库连接本地Navicat Premium,这样就方便操作了.下面我教大家如何实现. 第一步:在阿里云的安全组添加安全规则,配置安全组放开3306端口 第二步:打开宝塔设置数据库的权限, ...

  6. 【nodejs原理&源码赏析(4)】深度剖析cluster模块源码与node.js多进程(上)

    [摘要] 集群管理模块cluster浅析 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 概述 cluster模块是node.js中用于实现和管理 ...

  7. Python基础之升级pip版本

    使用python -m pip install --upgrade pip命令即可. 查看是否更新成功: 使用pip3 list命令即可.

  8. SpringMvc commons-fileupload图片/文件上传

    简介 SpringMvc文件上传的实现,是由commons-fileupload这个jar包实现的. 需求 在修改商品页面,添加上传商品图片功能. Maven依赖包 pom.xml <!-- 文 ...

  9. ssh远程管理服务的介绍

    第6章 远程管理的介绍 6.1 服务的概念介绍 6.1.1 ssh和telnet服务的相同和不同点 ssh: 服务端口号为22 在数据传输的时候是加密的传输 一般在互联网中使用,可以使用root账号进 ...

  10. [状态模式]实现stopwatch

    1.模拟传统面向对象语言的状态模式实现 // Stopwatch类 状态机class Stopwatch {    constructor() {        this.button1 = null ...