c博客06-2019-结构体&文件
1.本章学习总结(2分)
1.1 学习内容总结
- 结构体的定义
struct 结构名
{
变量类型 变量名;
变量类型 变量名;
...
};
- 结构体成员赋值
结构名.变量名=赋值内容;
or
结构体指针->变量名=赋值内容;
- 结构体数组排序做法
void sort(struct stu* p, int n)
{
int i, j;
struct stu temp;
for(i=0;i<n-1;i++)
{
for (j = 0; j < n - i - 1; j++)
{
if (p[j].score < p[j + 1].score)
{
temp = p[j];
p[j] = p[j + 1];
p[j + 1] = temp;
}
}
}
}
结构体数组排序与普通数组排序类似,只是将判断条件换成了结构体数组中的某个变量
- 结构体指针怎么用
定义
struct student
{
char name[10];
int score;
};
struct student*p;
or
struct student
{
char name[10];
int score;
}*p;
调用
整体调用:
stu1=*p;
用指针调用其中一个变量:
p->score=100;
- 共用体、枚举类型做法
共用体是一种特殊的数据类型,允许在相同的内存位置存储不同的数据类型。
union Data
{
int i;
float f;
char str[20];
} data;
枚举类型默认从0开始逐个给枚举值赋值,如果某个枚举值后面有等号和常量表达式,则这个常量表达式的值就赋给这个枚举值,往后的枚举值往后逐个加1。
enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
};
- 文件读写,文件中数据读进结构体数组
文件读写:
fp=fopen("abc.txt"."r+");
文件中数据读进结构体数组:
while(!feof(fp))
{
fscanf(fp, "%d,%s,%d", &stu[i].num, &stu[i].name, &stu[i]. score);
}
1.2 本章学习体会
通过本周的学习,我们学习了结构体与文件的使用,已经有了初步利用代码对文本文件进行读写的能力,现在的代码已经由之前只有一个主函数文件到现在的多文件编程,这要求我们能够熟练地运用函数封装将代码进行分块,不然代码的可读性就会一塌糊涂。
这两周代码量:554
2.综合作业--“我爱成语”
2.1.文件介绍
1.头文件介绍
- idiom.h
结构体或函数声明 | 主要功能 |
---|---|
结构体1:struct idioms | 用于存储成语及其解释。 |
结构体2:struct user | 用于存储用户的用户名以及密码。 |
函数声明1:void GetUsers(struct user* users, FILE* loginfp) | 用于将文件user.txt中的用户名以及密码存储到users数组中。 |
函数声明2:int Login(struct user* users) | 输出登陆界面,并进行登陆验证,如果输入次数超过八次,则自动退出 |
函数声明3:int CheckPassword(charid,charpassWord, struct user* users) | 检查用户名与密码是否与文件中的匹配 |
函数声明4:void GetMenu() | 输出菜单 |
函数声明5:void Getchoice(struct idioms* exp, FILE* fp) | 读取选择,接入对应的函数口 |
函数声明6:int GetIdiom(struct idioms* exp, FILE* fp) | 读取文件中的成语,存储到idioms数组里 |
函数声明7:int IdiomGame(struct idioms* exp,int idiomNum) | 开始成语游戏 |
函数声明8:void Scoreboard(int count, int right) | 实时计分板 |
函数声明9:int AddIdiom(FILE* fp) | 实现在程序中手动添加成语的功能 |
函数声明10:void SeekIdiom(struct idioms* exp, FILE* fp) | 查找成语 |
2.函数实现文件介绍。
文件1:IdiomMain.cpp
文件2:Login.cpp
- 函数声明1:void GetUsers(struct user* users, FILE* loginfp)
- 函数声明2:int Login(struct user* users)
- 函数声明3:int CheckPassword(charid,charpassWord, struct user* users)
文件3:idiom.cpp
- 函数声明1:void GetMenu(struct idioms* exp, FILE* fp)
- 函数声明2:void Getchoice(struct idioms* exp, FILE* fp)
- 函数声明3:int GetIdiom(struct idioms* exp, FILE* fp)
- 函数声明4:int AddIdiom(FILE* fp)
- 函数声明5:void SeekIdiom(struct idioms* exp, FILE* fp)
文件4:Game.cpp
- 函数声明1:int IdiomGame(struct idioms* exp, int idiomNum)
- 函数声明2:void Scoreboard(int count, int right)
2.2.运行结果
1.登录界面
登陆界面:
输入错误:
输入正确:
错误次数过多:
延时3秒后退出
2.游戏界面
导入成语:
(如果不导入就开始)
开始游戏:
添加成语:
查找成语;
退出系统:
2.3大作业总结
遇到的问题 | 解决方法 |
---|---|
将文件中的成语存储到结构数组中时,总是在中间出错停止 | 检查发现是定义存储成语解释的字符数组时给的空间太小了,于是将数组给定义足够的空间 |
有时候发现文件里的数据根本没有被存储进来 | 通过单步调试,找到是判断条件出了问题 |
写得有点赶。。。忘记加注释了,也没有对函数功能进行介绍,望老师与助教不要生气