c博客06-2019-结构体&文件
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-结构体&文件的更多相关文章
- C语言博客作业6---结构体&文件
C语言博客作业6---结构体&文件 1.本章学习总结(2分) 1.1思维导图 请以思维导图总结本周的学习内容.如下图所示: 1.2.学习体会 描述本周学习感受,也可以在这里提出你不理解地方.对 ...
- C语言博客作业06--结构体&文件
1.本章学习总结 1.1思维导图 1.2.本章学习体会 这是这学期最后一次博客园作业,文件和结构体感觉比指针还难,一直搞不是很懂,大作业没有方向感,现在还在搞,大作业没有成品,只能先去借鉴舍友的优秀代 ...
- C博客作业06--结构体&文件
1.本章学习总结 1.1思维导图 1.2本章学习体会 学习了结构和文件,又是懵懵的课了,我的天啊.结构还好,题目集一出就做了,不是很难,感觉掌握的还可以,不过这只是感觉而已,等到真正来写大作业的时候又 ...
- C语言博客作业06——结构体&文件
C语言博客作业06--结构体&文件 1.本章学习总结 1.1思维导图 1.2.本章学习体会 在本周的学习中,我们学习了关于结构体和文件的内容.结构体的本身并不难,但以结构体为基础的链表还是让我 ...
- C语言文件读写(结构体文件)
有时候,我们需要将输入的数据存储起来,这时候就需要用到文件,对于C语言而言,文件的读写有多种方式,下面主要是结构体文件的读写,例如student.dat(第一列是学号,第二列是姓名) xiaoming ...
- c语言博客作业--结构体&文件
1.本章学习总结 1.1思维导图 1.2.本章学习体会 本章学到了结构体如何构建,用typedef进行重定义结构体,结构指针,访问结构体的方式等. 文件:文件的读取,文件读写的几个函数,基本了解了文本 ...
- c语言第六次作业---结构体&文件
1.本章学习总结 1.1思维导图 1.2学习体会 这次应该是本学期最后一次博客了,总结一下这个学期的学习,一开始就基础薄弱还一直畏难一直懒惰,不想去解决问题导致后面问题越来越多就觉得学习越来越难,后面 ...
- [js高手之路]Node.js+jade抓取博客所有文章生成静态html文件
这个周末,恶补了一下jade模板引擎,就为生成静态html文件,这篇文章需要知道jade以及看过我的上篇文章,我先给出他们的参考链接: [js高手之路]Node.js模板引擎教程-jade速学与实战1 ...
- Flutter 即学即用系列博客——06 超实用 Widget 集锦
本篇文章我们来讲讲一些比较常用的 Widget. 大家验证的时候使用下面的代码替换 main.dart 代码,然后在 //TODO 语句返回下面常用 Widget 示例的代码. import 'pac ...
- [New!!!]欢迎大佬光临本蒟蒻的博客(2019.11.27更新)
更新于2019.12.22 本蒟蒻在博客园安家啦!!! 本蒟蒻的博客园主页 为更好管理博客,本蒟蒻从今天开始,正式转入博客园. 因为一些原因,我的CSDN博客将彻底不会使用!!!(带来不便,敬请谅解) ...
随机推荐
- Server MyEclipse Tomcat v7.0 was unable to start within 45 seconds. If the server requires more time
启动Tomcat服务器时经常遇到这个错误, Server MyEclipse Tomcat v7.0 was unable to start within 45 seconds. If the ser ...
- 分布式主键解决方案之--Snowflake雪花算法
0--前言 对于分布式系统环境,主键ID的设计很关键,什么自增intID那些是绝对不用的,比较早的时候,大部分系统都用UUID/GUID来作为主键,优点是方便又能解决问题,缺点是插入时因为UUID/G ...
- Thinkphp5.1 导入第三方包的问题
一般刚接触tp5.1的,会很不适应,虽然版本号只是比5.0多了0.1,但是差别挺大,废弃了不少方法,官方的教程又很简单,很多东西没说全,在此鄙视一下框架作者,最起码体谅一下小白嘛,搞了好多天才把5.1 ...
- 华为云OCR文字识别 免费在线体验!
嘿,华为云OCR文字识别了解一下,免费在线体验! 物流行业快速提取运单信息.医疗/保险行业单据快速录入.政务办事人证检验,你知道这些都是如何实现的么? 答案就是:OCR文字识别! 作为AI时代效率倍增 ...
- Linux下搭建及配置禅道服务器详细过程-包含软件资源
**1:百度云盘下载: ** 禅道--链接: https://pan.baidu.com/s/1Stu7nOZVIPO5TnpJWjWtiQ 提取码:dnik CentOs操作系统--链接: http ...
- .Net Core使用Ocelot网关(一) -负载,限流,熔断,Header转换
1.什么是API网关 API网关是微服务架构中的唯一入口,它提供一个单独且统一的API入口用于访问内部一个或多个API.它可以具有身份验证,监控,负载均衡,缓存,请求分片与管理,静态响应处理等.API ...
- hibernate查询方式(三)
QBC查询 (Query By Criteria) *****QBC查询有三个特点 **查询时不写sql语句 而是用方法来查询 **操作实体类和属性 **通过criteria对象来实现 1.查询所有 ...
- 借 redis cluster 集群,聊一聊集群中数据分布算法
Redis Cluster 集群中涉及到了数据分布问题,因为 redis cluster 是多 master 的结构,每个 master 都是可以提供存储服务的,这就会涉及到数据分布的问题,在新的 r ...
- NIM游戏,NIM游戏变形,威佐夫博弈以及巴什博奕总结
NIM游戏,NIM游戏变形,威佐夫博弈以及巴什博奕总结 经典NIM游戏: 一共有N堆石子,编号1..n,第i堆中有个a[i]个石子. 每一次操作Alice和Bob可以从任意一堆石子中取出任意数量的石子 ...
- 【Go入门学习】理解区分数组和切片
一.前言 学过 Go 的都知道在 Go 语言中有四种复合数据类型:数组.切片(Slice).哈希表(Map)和结构体(Struct),而很多 Go 初学者也很容易把数组和切片弄混淆,所以要怎么把这两个 ...