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大作业总结

遇到的问题 解决方法
将文件中的成语存储到结构数组中时,总是在中间出错停止 检查发现是定义存储成语解释的字符数组时给的空间太小了,于是将数组给定义足够的空间
有时候发现文件里的数据根本没有被存储进来 通过单步调试,找到是判断条件出了问题

写得有点赶。。。忘记加注释了,也没有对函数功能进行介绍,望老师与助教不要生气

posted @ 2019-12-15 22:16  ZGGYY  阅读(238)  评论(2编辑  收藏  举报