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.小结

在本次作业中,我意识到了自己还有很多的不足,以后要多打代码,加以改正。


posted @ 2019-12-15 21:25  1911王奕  阅读(229)  评论(1编辑  收藏  举报