1.本章学习总结
1.1 学习内容总结
- 结构体定义及成员赋值:
struct student {int x, int y};
struct student s1={3,5};
s1.x=4;
s1.y=8;
- 结构体数组排序做法:
void sort(struct student* p, int n)
{
int i, j;
struct student temp;
for(i=0;i<n-1;i++)
{
for (j = 0; j < n - 1 - i; j++)
{
if (p[j].sum < p[j + 1].sum)
{
temp = p[j];
p[j] = p[j + 1];
p[j + 1] = temp;
}
}
}
}
- 结构体指针用法:
用*p访问结构成员
(*p).num=101;
用指向运算符->访问指针指向的结构成员
p->num=100;
结构体指针作为函数参数
int score (struct student *p,int n);
pos=score (students ,n);
- 共用体、枚举类型做法:
共用体
union Data{
int i;
char ch;
float f;
}a={1, 'a', 1.5};//错误
union Data a = {16};//正确
union Data a = {.ch = ‘j’};//正确
枚举类型
enum Weekday{sun, mon, tue, wed, thu, fri, sat} workday, weak_end;
- 文件读写,文件中数据读进结构体数组:
文件读写
fp=fopen("abc.txt"."r");
fp=fopen("abc.txt"."w");
文件中数据读进结构体数组
while(!feof(fp))
{
fscanf(fp, "%[^,],%[^,],%[^,],%d, %s", &student[i].no, &student[i].name, &student[i]. sex, &student[i].age, &student[i].major);
}
1.2 本章学习体会
- 这两章的内容比较综合,基本上用到了前几章的所有知识,对前几章内容有一定的复习作用。综合也意味着难度更大,对之前学习过的内容的掌握,在一定程度上影响这两章的学习,然而这部分内容确实比较抽象,理解起来不那么容易,运用起来也不容易掌握。
- 这两周代码量:870行
2.综合作业--“我爱成语”
2.1.文件介绍
1.头文件介绍
idiom.h
- 结构体IDI用来存成语及意思。
- 函数menu()展示菜单。
- 函数getIdiom()查看成语和意思。
- 函数findIdiom()查找成语及意思。
- 函数addIdiom()添加成语及意思。
login.h
- LOGIN结构体存用户名和密码。
- 函数checkUserValid()验证登录。
- 函数Login()输入用户名和密码并给出提示。
game.h
- idiomGame()出题函数。
2.函数实现文件介绍。
文件1:main.c
- 打开和关闭文件,以及各函数之间的调用。
文件2:Login.c
- 输入用户名和密码,验证两者是否正确。
文件3:idiom.c
- 进行成语的查看、查找和增加。
文件4:menu.c
- 菜单展示,返回选择数。
文件5:game.c
- 实现成语随机挖空出题。
2.2.运行结果
1.登录界面
2.游戏界面
2.3大作业总结
1.碰到问题及解决办法
Q:如何实现成语随机挖空?
A:用随机偶数代表随机某个字。
Q:成语随机挖空可能两次会随机到同一个字。
A:记录上次随机的数,对比解决。
Q:如何比对答案是否正确?
A:成语挖空前先记录下成语,记录下两个字的先后顺序。
Q:增加成语后,立即查看成语会出现乱码。
A:未找到原因。
Q:主菜单输入字符会死循环,未解决。
A:scanf("%d",&a)只能接收数字,输入字符则被放置在缓冲区,未解决。