c博客06-2019-结构体&文件

1.本章学习总结

1.1 学习内容总结

  • 结构体如何定义、成员如何赋值
    结构体的定义以及赋值:
    结构体的一般形式:
    struct 结构体名
    {
    数据类型   成员名1;
    数据类型   成员名2;

    数据类型   成员名n;
    };
    1.先定义结构体类型再定义变量名:
          struct 结构体名
         {
                 成员列表;
         };
         struct 结构体名 变量名;
    2.在定义类型的同时定义变量。
         这种形式的定义的一般形式为:
            struct 结构体名
            {
                      成员列表;
            }变量名; 
    3.直接定义结构类型变量
        其一般形式为:
             struct      //没有结构体名
             {
                       成员列表;
              }变量名;

  • 结构体数组排序做法
    按照结构体数组的某一项排序,那么一个结构体包含的其他元素仍保持不变。也就是说只能选择其中一项作为指标进行排序,相应的其他值对应不变化。

  • 结构体指针怎么用
    结构指针指向结构变量;
    struct student s1;
    p=&s1;
    1.用p访问结构成员:
    eg:
    p).num=101;
    *p是p指向的结构变量
    2.用指向运算符——>访问指针指向的结构成员:
    p->num=101;
    以上用法和s1.num=101;是等价的。

  • 共用体、枚举类型做法
    共用体类型数据的特点:
    1.同一个内存段可以用来存放几种不同类型的成员,但是在每一瞬间只能存放其中的一种,而不是同时存放几种。换句话说,每一瞬间只有一个成员起作用,其他的成员不起作用,即不是同时都在存在和起作用。
    2.共用体变量中起作用的成员是最后一次存放的成员,在存入一个新成员后,原有成员就失去作用。
    3.共用体变量的地址和它的各成员的地址都是同一地址。
    4.不能对共用体变量名赋值,也不能企图引用变量名来得到一个值。
    5.共用体类型可以出现在结构体类型的定义中,也可以定义共用体数组。反之,结构体也可以出现在共用体类型的定义中,数组也可以作为共用体的成员。

对共用体的成员的引用与结构体成员的引用相同。但由于共用体各成员共用同一段内存空间,使用时,根据需要使用其中的某一个成员。

枚举:
枚举将同一类型的数据统一存入一个指针数组中,每个数组成员都有自己的值并且相互之间可以进行比较;

  • 文件读写,文件中数据如何读进结构体数组
    文件读写:fopen函数和fclose函数,要注意打开失败的情况;
    读进结构体:
    eg:
while(!feof(fp))
{
    fscanf(fp,"%d%s%d",&student[i].num,student[i].name,&student[i].score);
    i++;
}

1.2 本章学习体会

关于共用体的用法我还是不太懂,还有就是感觉好像课程走的很紧,应对考试也焦头烂额,害,难受啊老铁
周代码量:

第一周 第二周
235 225

2.综合作业--“我爱成语”

2.1.文件介绍

头文件介绍

头文件1.h

结构体:
成语信息:成语数组和成语含义系统;
用户信息:用户姓名,做对的题目数,用户分数
函数:
读取文件和写入文件的函数;

int readIdiom(Idiom idiom[], FILE * fp);
int readUser(User user[], FILE * fp);
void writeUserRank(FILE * fp, User user[], int user_count);
void writeUser(FILE * fp, User user[], int user_count);

程序通用的函数;

void userSort(User user[], int user_count);

关于菜单的函数;

int loginMenu(User user[], int user_count);
int gameMenu(Idiom idiom[], int idiom_count, int * score);
void rankMenu(User user[], int user_count);
  • 头文件代码截图:

2.函数实现文件介绍。

文件1:main.c

main函数:
进行文件的读取和退出;
登陆页面和结束页面,清屏;
定义用户数量和成语数量;
对其他函数的调用;

  • 主要代码截图:

文件2:Login.c
登录界面,判断用户是否正确;
int loginMenu(User user[], int user_count);
答题界面提醒;
int gameMenu(Idiom idiom[], int idiom_count, int * score);
排行榜输出;
void rankMenu(User user[], int user_count);
  • 主要代码截图:




文件3:idiom.c
文件的读写,数据读取
int readIdiom(Idiom idiom[], FILE * fp);//向文件读取数据,如果读取到文件末尾,返回非0
int readUser(User user[], FILE * fp);用户信息读取
void writeUserRank(FILE * fp, User user[], int user_count);//向文件写入数据
void writeUser(FILE * fp, User user[], int user_count);写入用户信息
  • 主要代码截图:


2.2.运行结果

1.登录界面

2.游戏界面


3.排名界面

2.3大作业总结

找不到文件 没将成语文件拖入文件夹
调试不通过 SDL检查没关
输出成语含义错误 自定义的文件我还没改
原文地址:https://www.cnblogs.com/zyc01-jm/p/12045305.html