c博客06-2019-结构体&文件
1.本章学习总结
1.1 学习内容总结
- 结构体的定义和赋值
- 定义:结构体的定义必须要有定义结构类型的关键字struct,在struct之后,自行命名一个合法的C标识符作为结构名,struct与结构名两者合起来共同组成结构类型名。在定义嵌套的结构类型时,必须先定义成员的结构类型,再定义主结构类型。
- 赋值:使用结构成员操作符“.”来引用结构成员,从而对结构成员赋值。对于具有相同类型的两个结构变量,允许将一个结构变量的值直接赋给另一个结构变量,这是结构中唯一的整体操作方式。
- 结构体数组排序做法:
for (i = 0; i < n - 1; i++)
{
index = i;
for (j = i + 1; j < n; j++)
if (students[j].average > students[index].average)
index = j;
temp = students[index];
students[index] = students[i];
students[i] = temp;
}
- 结构体指针用法:
(1)用*p访问结构成员
如:
(*p).num=101;
注意,(*p)中的括号是不可少的,因为成员运算符"."的优先级高于"*",若没有括号,则*p.num等价于*(p.num),含义发生了变化,从而会产生错误。
(2)用指向运算符->访问指针指向的结构成员
如:
p->num=101;
- 共用体、枚举类型做法:
- 共用体:
union 联合名 { 成员声明 成员声明 ... } 变量列表;
- 枚举:
enum 枚举名{枚举值1,枚举值2,...} 变量列表;
- 文件读写,文件中数据如何读进结构体数组:
fp=fopen("c:\\student.txt","r");
while(!feof(fp))
{
fscanf(fp,"%[^,],%[^,],%[^,],%d,%s",&student[i].no,&student[i].name,&student[i].sex,&student[i].age,&student[i].major);
i++;
}
1.2 本章学习体会
- 本章的内容较为复杂,学习难度较大,对于知识点的掌握还不够熟练,需要多练多复习。
- 代码量大概700行左右
2.综合作业--“我爱成语”
2.1 文件介绍
1.头文件介绍
idiom.h
- 在该头文件中分别有两个结构体跟五个函数声明
- 结构体USER:用于存储用户账号和密码
- 结构体IDIOM:用于存储成语本身及其释义
- 函数Register:用户登录界面
- 函数CheckUser:用于检查用户输入的账号密码是否正确
- 函数Game:进入游戏界面
- 函数GetIdiom:从文件中获取成语及其释义,并将其存储在结构体数组中
- 函数Question:用于出题
2.函数实现文件介绍
文件1:idiomMain.cpp
- 在主函数中,打开文件,关闭文件,并调用登录界面的函数及游戏界面的函数
文件2:register.cpp
- 用户在函数Register中输入账号密码,并有该函数调用Check函数检查是否有误
文件3:check.cpp
- 检查用户输入的账户密码是否正确
文件4:idiom.cpp
- 该文件中包含3个主要函数
- Game函数:用于决定用户是否要退出游戏
- GetIdiom函数:将文件中的成语存储到结构体数组中,并计算成语的数量
- Question函数:用于随机生成一种题型并输出,同时检查用户输入的成语是否正确
2.2 运行结果
1.登录界面
2.游戏界面
3.排名界面
没做出来....
2.3 大作业总结
1.碰到的问题及解决方法
Q1:一开始我在游戏界面时,无法选择是否要继续游戏
A1:经调试发现,我的scanf会将回车吸收,作为choice的值,故我再scanf前加了一个getchar,然后运行顺利
Q2:我在运行游戏的时候,成语总是出错,会有“?”出现
A2:后我发现是我在输出时,成语的下标写错了,比如成语的第一个字对应的下标应为0和1,我却写成了1和2,经改正后,运行顺利
2.小结
在本次作业中,我意识到了自己还有很多的不足,以后要多打代码,加以改正。