c博客06-结构体&文件
1.本章学习总结
1.1 学习内容总结
结构体定义
(结构体将不同类型的相关信息组织在一起)
关键字struct和它后面的结构名一起组成一个新的数据类型名
struct 结构名
{
类型名 结构成员名1;
类型名 结构成员名2;
...
类型名 结构成员名n;
};(需要加分号)
若要实现结构类型的嵌套
必须先定义成员的结构类型,再定义主结构类型
struct address
{
...
};
struct student
{
struct address addr;
...
};
成员赋值
总体赋值
struct student s={变量1,变量2,...,变量n}
变量类型应与结构体内部成员的变量类型一致
分别赋值
s1.结构成员名1=...;
...
s1.结构成员名n=...;
结构体数组排序
定义结构数组
struct student students[50]
struct student temp//储存待交换的结构体变量
选择排序法
for i=0 to n-1 do
index=i
for j=i+1 to n do
if(students[j].结构成员名和student是[index].结构成员名相比较)
temp交换
结构体指针
结构变量首地址(第一个成员的地址)
(*p). 结构成员名
等价于
p->结构成员名
共用体、枚举类型
共用体
(允许在相同的内存位置存储不同的数据类型,但同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉)
union 共用体名
{
成员声明;
....
成员声明;
};(变量列表)
结构体和共用体的区别在于:
结构体的各个成员会占用不同的内存,互相之间没有影响;
而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
枚举
enum 枚举名 {枚举值1,…}变量列表(枚举值用逗号隔开)
枚举值应为合法标识符或常量表达式每一个枚举值都会在前一个基础上递增1;
如果第一枚举值没有指定值,那么就是 0;
如果指定是负数,后面的值也会从负数的基础上地递增。
文件读写
fputc(ch,fp)//单个字符写入(fputc函数如果成功的将字符写入到文件了,则其返回值就是写入的那个字符,如果失败,则返回EOF(-1))
fgetc(fp)//单个字符读取
fputs(字符数组名、字符型指针变量或字符串常量,fp)//将一个字符串写入文件
fgets(字符数组名、字符型指针变量或字符串常量, n(最多读n-1个字符), fp); //从文件中读取一行数据
fprintf(fp,"%s", s); //按照某种格式写入文件
fscanf(fp, "%d", &i); //读取整型数,按照某种格式
fread(str, sizeof(char), 2, fp)//文件所有内容
fwrite(str, sizeof(char), strlen(str), fp)
文件中数据读进结构体数组
定义文件指针FILE* fp;
定义结构体指针 eg.IDO *ptr;
if ((fp = fopen("文件名", "打开方式")) == NULL)//打开文件
{
printf("file open error!");
exit(1);
}
while (!feof(fp))//从文件开头扫描到文件结尾
{
利用fscanf或fgets将文件中的数据传入结构体成员中ptr->成员名;
}
1.2 本章学习体会
1、基本了解了文件的分布应用
2、但是在结构体的调用和定义指针指向结构体成员变量方面还有点混乱
3、对于文件的读写慢慢写可以琢磨出来,但是还不太熟练
4、希望在写入文件方面可以多讲一些内容
周 | 代码量 |
---|---|
15、16 | 652 |
2.综合作业--“我爱成语”
2.1.文件介绍
1.头文件介绍 idiom.h
1、
结构体 | 结构体1 | 结构体2 |
---|---|---|
定义 | typedef struct idiom{}IDO; | typedef struct usersLogin{}USER; |
功能 | 存放成语信息 | 存放用户信息 |
2、
登入函数 | 函数1 | 函数2 | 函数3 |
---|---|---|---|
声明 | void LoginMenu(); | void Registered(); | int CheckUsers(USER *psu); |
功能 | 登录界面菜单 | 注册新用户 | 判断用户是否存在 |
3、
菜单模式选择函数 | 函数1 | 函数2 |
---|---|---|
声明 | void menuList(); | void ModeSelection(); |
功能 | 功能界面菜单 | 模式选择 |
4、
功能函数 | 函数1 | 函数2 | 函数3 | 函数4 | 函数5 |
---|---|---|---|---|---|
声明 | IDO* SortIdiom(IDO* ptr,FILE* fp); | int GetsIdiom(IDO* idiom); | void AddIdiom() | void FoundExactIdiom(IDO* idiom); | void FoundRelevantIdiom(IDO* idiom); |
功能 | 成语和释义分装 | 输出展示库中成语 | 添加成语 | 查找确定成语释义 | 查找含有关键字的成语及释义 |
头文件代码截图
2.函数实现文件介绍。
文件1:idiomMain.cpp
1、模式选择(运用switch语句选择进入哪一分支实现函数功能)
文件2:LoginSystem.cpp
1、无账号,注册登入(将注册账号的信息存入user文件,登入时就可识别)
2、查看用户名密码是否正确(将用户名和密码分别和文件中用户名和密码比对,若正确则登入成功)
文件3:idiomFunction.cpp
1、成语和释义分装
2、输出库中成语
3、添加成语
4、查找确定成语释义
5、查找含有关键字的成语及释义
6、成语游戏
2.2.运行结果
1.登录界面
2.游戏界面
2.3大作业总结
1.碰到问题及解决办法
问题 | 解决方法 |
---|---|
无法将补充成语写入文本中 | 打开文件方式不正确,应改为"r+" |
成语写入文本后再次输出会出现乱码 | 在写入成语的函数中独立打开关闭文件 |