nbbnbnbnbnb
1.本章学习总结(2分)
1.1 学习内容总结
结构体的定义与赋值
结构类型定义的一般形式为:
struct 结构名 {
类型名 结构成员1;
类型名 结构成员2;
...
类型名 结构成员3;
};
结构体混合定义
struct 结构名 {
类型名 结构成员1;
类型名 结构成员2;
...
类型名 结构成员3;
}结构变量名表;
无类型名定义
struct {
类型名 结构成员1;
类型名 结构成员2;
...
类型名 结构成员3;
}结构变量名表;
结构体变量的整体赋值
1.如果两个结构变量具有相同的类型,则允许将一个结构变量的值赋给另一个结构变量
2.也可用strcpy函数
结构体数组排序做法
以c11-结构体数组按总分排序 (10分)为例
结构体指针怎么用
当一个指针变量指向结构体时,我们就称它为结构体指针。
指针变量的基类型必须与结构体变量的类型相同。
如下:
//结构体
struct Student{
char *name; //姓名
int num; //学号
int age; //年龄
char group; //所在小组
float score; //成绩
} stu1 = { "Tom", 12, 18, 'A', 136.5 };
//结构体指针
struct Student *pstu = &stu1;
也可以在定义结构体的同时定义结构体指针,如下:
struct Student{
char *name; //姓名
int num; //学号
int age; //年龄
char group; //所在小组
float score; //成绩
} stu1 = { "Tom", 12, 18, 'A', 136.5 }, *pstu = &stu1;
结构体变量名和数组名不同,数组名在表达式中会被转换为数组指针,而结构体变量名不会,无论在任何表达式中它表示的都是整个集合本身,要想取得结构体变量的地址,必须在前面加&
通过结构体指针可以获取结构体成员,一般形式为:
(*pointer).memberName
pointer->memberName
第一种写法中,.的优先级高于,(pointer)两边的括号不能少。
第二种写法中,->是一个新的运算符,习惯称它为“箭头”,有了它,可以通过结构体指针直接取得结构体成员;这也是->在C语言中的唯一用途。
共用体、枚举类型做法
- 共用体
使用同一段内存单元存放不同类型的变量,或者说使几个不同的变量共享同一段内存的结构,称为“共用体”类型的结构,声明与定义如下:
union Data{
int n;
char ch;
double f;
};
union Data a, b, c;
其使用和结构体相似,但是初始赋值只能赋一个变量的值;
结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。
- 枚举类型
所谓“枚举”就是把可能的值一一列举出来,变量的值只限于列举出来的值的范围内。
枚举类型的定义形式为:
enum typeName{ valueName1, valueName2, valueName3, ...... }; //;不可少
例如,列出一个星期有几天:
enum week{ Mon, Tues, Wed, Thurs, Fri, Sat, Sun };
可以看到,我们仅仅给出了名字,却没有给出名字对应的值,这是因为枚举值默认从 0 开始,往后逐个加 1(递增);也就是说,week 中的 Mon、Tues … Sun 对应的值分别为 0、1 … 6。
我们也可以给每个名字都指定一个值:
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的更多相关文章
- 《Windows驱动开发技术详解》之IRP的同步
应用程序对设备的同步异步操作: 大部分IRP都是由应用程序的Win32 API函数发起的.这些Win32 API本身就支持同步和异步操作.例如,ReadFile.WriteFile和DeviceIoC ...
随机推荐
- 获取当前URL地址和$_GET获取参数
用这个方法,可以在不使用$_get[]就可以获取get传过来的参数.还可以获取当前的URL public function getCurrentUrl() { $pageURL = 'http'; i ...
- 微信小程序文档
提示框: wx.showToast(OBJECT) 显示消息提示框 OBJECT参数说明: 示例代码: wx.showToast({ title: '成功', icon: 'success', dur ...
- .net Dapper 实践系列(4) ---数据查询(Layui+Ajax+Dapper+MySQL)
写在前面 上一小节,总结了数据显示时,会出现的日期问题.以及如何处理格式化日期.这个小节,主要总结的是使用Dapper 中的QueryMultiple方法依次显示查询多表的数据. 实践步骤 1.在Bo ...
- linux搭建GitLab
GitLab CentOS6 1. 安装VMware和CentOS 2. 安装必备Linux插件 3. 准备安装GitLab 4. 开始安装GitLab 5. 配置GitLab 6. 启动GitLab ...
- python 基础(集合)
#set里的元素是唯一的,即没有重复的,可以用set()函数,去数据的重复冗余 L = [1,1,1,2,4,5,6,7] S = set(L) print(S) #打印结果{1, 2, 4, 5, ...
- Weak Session IDs
工具的使用 首先github上下载火狐插件(正版收费),按F12调用 服务器生成sessionID通过response返回给浏览器,sessionID存放在浏览器cookie中,然后再通过cookie ...
- iOS - FlexBox 布局之 YogaKit
由于刚开始的项目主要用的H5.javaScript技术为主原生开发为辅的手段开发的项目,UI主要是还是H5,如今翻原生.为了方便同时维护两端.才找到这个很不错的库. FlexBox?听起来像是一门H5 ...
- vue项目中添加单元测试
从网上找了很多例子关于单元测试,都是如何新建项目的时候的添加单元测试,用vue-cli中怎么添加,但是我的项目已经生成了,不能再一次重新初始化,这时如何添加单元测试,这里面遇到了好多坑,写在这里记录一 ...
- 遍历js对象中的属性
可以使用js自带的for in.也可以使用Ext JS中的方法来遍历js对象中的属性 代码如下: /** 遍历对象 */ var person = {name:'张泰松',age:28}; //js方 ...
- MYSQL慢查询优化方法及优化原则
1.日期大小的比较,传到xml中的日期格式要符合'yyyy-MM-dd',这样才能走索引,如:'yyyy'改为'yyyy-MM-dd','yyyy-MM'改为'yyyy-MM-dd'[这样MYSQL会 ...