1.本章学习总结(2分)

1.1 学习内容总结

结构体的定义与赋值

结构类型定义的一般形式为:

  1. struct 结构名 {
  2. 类型名 结构成员1
  3. 类型名 结构成员2
  4. ...
  5. 类型名 结构成员3
  6. };

结构体混合定义

  1. struct 结构名 {
  2. 类型名 结构成员1
  3. 类型名 结构成员2
  4. ...
  5. 类型名 结构成员3
  6. }结构变量名表;

无类型名定义

  1. struct {
  2. 类型名 结构成员1
  3. 类型名 结构成员2
  4. ...
  5. 类型名 结构成员3
  6. }结构变量名表;

结构体变量的整体赋值

1.如果两个结构变量具有相同的类型,则允许将一个结构变量的值赋给另一个结构变量

2.也可用strcpy函数

结构体数组排序做法

以c11-结构体数组按总分排序 (10分)为例

结构体指针怎么用

当一个指针变量指向结构体时,我们就称它为结构体指针。

指针变量的基类型必须与结构体变量的类型相同。

如下:

  1. //结构体
  2. struct Student{
  3. char *name; //姓名
  4. int num; //学号
  5. int age; //年龄
  6. char group; //所在小组
  7. float score; //成绩
  8. } stu1 = { "Tom", 12, 18, 'A', 136.5 };
  9. //结构体指针
  10. struct Student *pstu = &stu1;

也可以在定义结构体的同时定义结构体指针,如下:

  1. struct Student{
  2. char *name; //姓名
  3. int num; //学号
  4. int age; //年龄
  5. char group; //所在小组
  6. float score; //成绩
  7. } stu1 = { "Tom", 12, 18, 'A', 136.5 }, *pstu = &stu1;
结构体变量名和数组名不同,数组名在表达式中会被转换为数组指针,而结构体变量名不会,无论在任何表达式中它表示的都是整个集合本身,要想取得结构体变量的地址,必须在前面加&

通过结构体指针可以获取结构体成员,一般形式为:

  1. (*pointer).memberName
  2. pointer->memberName

第一种写法中,.的优先级高于,(pointer)两边的括号不能少。

第二种写法中,->是一个新的运算符,习惯称它为“箭头”,有了它,可以通过结构体指针直接取得结构体成员;这也是->在C语言中的唯一用途。

共用体、枚举类型做法

  • 共用体

    使用同一段内存单元存放不同类型的变量,或者说使几个不同的变量共享同一段内存的结构,称为“共用体”类型的结构,声明与定义如下:
  1. union Data{
  2. int n;
  3. char ch;
  4. double f;
  5. };
  6. union Data a, b, c;

其使用和结构体相似,但是初始赋值只能赋一个变量的值;

结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。

结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。

  • 枚举类型

    所谓“枚举”就是把可能的值一一列举出来,变量的值只限于列举出来的值的范围内。

    枚举类型的定义形式为:
  1. enum typeName{ valueName1, valueName2, valueName3, ...... }; //;不可少

例如,列出一个星期有几天:

  1. enum week{ Mon, Tues, Wed, Thurs, Fri, Sat, Sun };

可以看到,我们仅仅给出了名字,却没有给出名字对应的值,这是因为枚举值默认从 0 开始,往后逐个加 1(递增);也就是说,week 中的 Mon、Tues … Sun 对应的值分别为 0、1 … 6。

我们也可以给每个名字都指定一个值:

  1. enum week{ Mon = 1, Tues = 2, Wed = 3, Thurs = 4, Fri = 5, Sat = 6, Sun = 7 };

文件读写,文件中数据如何读进结构体数组

关于文件函数:

字符方式文件读写函数:fgets()和fputs();

字符串方式文件读写函数:fputs()和fgets();

格式化方式文件读写函数fscanf()和fprintf();

数据块方式文件读写函数fgetc()和fwrite();

1.2 本章学习体会

学习感受:感觉这两周学得还行,就是链表听得有点懵。通过这次得成语大作业,对函数的运用更加灵活了。反正最大的感受就是好像一认真打代码,头发就往下掉。,不过还是得认真学习。

代码量:500行左右

2.1.文件介绍

头文件介绍

头文件1:struct_news.h

头文件2:login.h

头文件3:idiom_game.h

2.函数实现文件介绍。

文件1:struct_news.cpp

  • 文件功能:将文件中的信息储存到结构体中
  • 设计思路:分别根据3个数据文件的信息储存特点,采用用了2次fgets,一次fscanf的读取方式。在这里我想吐槽下傻傻的自己。警惕一下:没有完全理解知识点的
  • 危害。因为user.txt,ranking.txt的信息储存格式都一样的,在读取user.txt,我用了fscanf,十分快。但是在读取ranking.txt,我用了fgets,然后艰难地完成* 了读取.
主要代码截图

文件2:login.cpp

  • 文件功能:检验玩家输入的用户和账号是否正确
  • 设计思路:将玩家输入的用户账号与用户信息结构体的数据进行遍历对比
主要代码截图

文件3:idiom_game.cpp

  • 文件功能:进行出题和系统排名
  • 设计思路:出题函数:先从成语结构体中,随机抽出一个成语,然后赋值给str字符串,在定义2个随机数范围(0,2,4,6),用‘-’去覆盖,然后输出str-题目。
  • 再将玩家输入的答案与随机抽出的函数对比。
  • 系统排名:用冒泡法去排序.
主要代码截图





文件4:idiom_main.cpp





2.2.运行结果

1.登录界面

2.游戏界面

3.排名界面

2.3大作业总结

1.碰到问题及解决办法可以列表展示。

Q1:最深刻的问题就是,当我只写在3个工程文件上的时候,发现博客要求放在更多个文件。然后出现了重定义现象.

A1:我一开始一直找有没有重复定义,发现没有。就经过长时间的百度了一下,发现只要加上#pragma once,就可解决

Q2:在读取ranking.txt的文件时,用字符型变量去读取用户成绩,然后在用户成绩计算的时候,不知如何计算.

A2:可以使用atoi和itoa自如转换字符型数值和整型数值

Q3:在一开始打开文件时,一直出错。

A3:因为文件名为idiom.txt,然后fopen=("idiom.txt","r+").应将文件名为idiom.txt改为idiom

Q4:出现最多的问题就是读取跟读入文件时,一直出现烫烫。

A4:一直慢慢地调试,排除问题可能性

2.小结

虽然写大作业的过程很艰难,但也真的帮助更好地去掌握知识点和巩固基础

nbbnbnbnbnb的更多相关文章

  1. 《Windows驱动开发技术详解》之IRP的同步

    应用程序对设备的同步异步操作: 大部分IRP都是由应用程序的Win32 API函数发起的.这些Win32 API本身就支持同步和异步操作.例如,ReadFile.WriteFile和DeviceIoC ...

随机推荐

  1. 2019 央视网java面试笔试题 (含面试题解析)

    本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.央视网等公司offer,岗位是Java后端开发,最终选择去了央视网. 面试了很多家公司,感觉大部分公司考察的点都差 ...

  2. hadoop2.8 ha 集群搭建

    简介: 最近在看hadoop的一些知识,下面搭建一个ha (高可用)的hadoop完整分布式集群: hadoop的单机,伪分布式,分布式安装 hadoop2.8 集群 1 (伪分布式搭建 hadoop ...

  3. CentOS7-NETWORK,SSH

    SSH CentOS会自带SSH,直接启动服务, systemctl start sshd 打开配置文件 vi /etc/ssh/sshd_config 将文件中的下面2行注释去掉 PasswordA ...

  4. thymeleaf模板、thymeleaf语法相关中文文档教程

    thymeleaf模板在SpringBoot中是默认的模范引擎技术,SpringBoot不推荐使用比较老旧的jsp.但如果您想使用jsp的话,当然也可以.我这里为您讲述thymeleaf模板的基本th ...

  5. 数据库系统load飙高问题解决思路(转)

    工作过程中有时候会接收到数据库服务器器load 飙高的报警,比如:  load1 15.25 base: 8.52,collect time:2014-08-30 如何处理load 异常飙高的报警呢? ...

  6. 关于DOM事件流、DOM0级事件与DOM2级事件

    一.DOM 事件模型 DOM 事件模型包括捕获和冒泡,捕获是从上往下到达目标元素,冒泡是从当前元素,也就是目标元素往上到 window 二.流 流的概念,在现今的 JavaScript 中随处可见.比 ...

  7. BZOJ1123 [POI2008]BLO(割点判断 + 点双联通缩点size)

    #include <iostream> #include <cstring> #include <cstdio> using namespace std; type ...

  8. 基于appium快速实现H5自动化测试

    一.下载Appium-Server及库文件 库文件:jar包:java-client-3.1.0.jar Appium-Server:Appium服务器: 注:Appium包含客户端和服务端,客户端就 ...

  9. SD介绍

    1. 介绍 MMC,MultiMediaCard,即多媒体卡,是一种非易失性存储器件,有7pin,目前已基本被SD卡代替 eMMC,Embedded Multimedia Card,内嵌式存储器,以B ...

  10. idea去除mybatis的xml那个恶心的绿色背景

    https://my.oschina.net/qiudaozhang/blog/2877536