结构体

知识点总结

结构体(多类型数据的集合)

1.定义(以学生信息管理系统为举例代码)

struct  结构体名               struct student
{                             {
    数据类型   成员名1;          int num;                        /*学号*/
    数据类型   成员名2;          char name[10];                  /*姓名*/
      ···        ···             int computer,english,math;      /*三门课程成绩*/
    数据类型   成员名n;          double average;                 /*个人平均成绩*/
 };                           };

后续对结构体的引用定义

student STU; student *stu;

结构体成员的访问

    scanf("%d",&student.num);/*使用结构体名加“.”的方式访问了num这一变量*/

应用typedef的结构体定义
可同时定义普通结构体名与结构体指针名

typedef   struct  结构体名               struct student
{                                       {
    数据类型   成员名1;                    int num;                        /*学号*/
    数据类型   成员名2;                    char name[10];                  /*姓名*/
      ···        ···                       int computer,english,math;      /*三门课程成绩*/
    数据类型   成员名n;                    double average;                 /*个人平均成绩*/
}重定义名称                              }STU,*stu;

后续对结构体的引用定义

STU stu1,stu2,stu3....(定义普通结构体变量) stu stu1,stu2,stu3....(定义结构体指针变量)

2.结构体数组

定义:
STU students[60];
定义了一个包含有60个大小的结构体数组
stu Stu=student;
定义了一个指向结构体数组student的指针Stu;

结构体成员的访问

普遍访问方式

    scanf("%d",&student.num);/*使用结构体名加“.”的方式访问了num这一变量*/

指针中使用 "." 来访问,也可以用 "->" 。

stu stu1,stu2;//定义结构体指针stu1,stu2;
stu1.num = 10;//给stu1中的学号赋值;
strcpy(stu2->name,"Mike");//给stu2中的姓名(name)赋值;

同时注意,结构体中的字符串的赋值任然满足
1.定义时赋初值
2.后期使用函数strcpy(str1,str2)赋值,或修改

3.结构体嵌套使用

注意需先定义被嵌套结构体
struct address{
char city[15];
char street[20];
int code;
int zip;
};
struct student_massage{
int num;
char name[10];
struct address adrr;//定义通信地址成员
};

共用体与枚举类型

共用体

定义:

union 联合名
{
成员声明;
成员声明;
...
}变量列表;

联合中的成员共用同一块内存空间,C语言编译程序保证分配给联合的内存能够容纳其最大的成员变量,以最后一次赋值为值。

枚举变量定义和初始化

enum 枚举名{枚举值1,枚举值2,...} 变量列表;
每个枚举值都是一个合法的标识符,或者是一个标识符后面跟一个等号,再加上一个常量表达式。
编译程序自动从0开始逐个给枚举值赋值,
如果其中一个枚举值已有值,则从该枚举值的值往后第一个枚举值为,然后依次加1。
某个枚举变量的值只能是定义时列出的枚举值之一。

文件读写&文件数据读取

fopen()打开文件函数
调用形式为fopen(“文件名”,“文件打开方式”);
文件的打开方式
“r”:打开文本文件进行只读;
“w”:建立新文本文件进行只写;
“a”:打开文本文件进行追加;
“r+”:打开文本文件进行读写;
“w+”:建立新文本文件进行读写;
“a+”:打开文本文件进行追加读写;
后面加一个b可将二进制文件的打开。
关闭文件函数fclose(),一般格式为fclose(文件指针);
文件读写分为字符方式文件读写函数:fgetc()和fputc();
字符串方式文件读写函数:fputs()和fgets();
格式化方式文件读写函数:fscanf()和fprintf();
数据块方式文件读写函数:fread()和fwrite()。
还有其他相关函数,如重定位文件首函数rewind();
指针移动控制函数fseek();
获取指针当前位置函数ftell();
文件末尾检测函数feof();
读写错误检查函数ferror();
出错标记清除函数clearerr()。

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

2.1 文件介绍

头文件介绍:idiom.h

在该头文件中分别有两个结构体跟五个函数声明

struct IDIOM;//储存成语数据结构体
struct game_score//储存用户答题情况机构提
int GetIdiom(IDIOM* idioms, FILE* fp);//获取成语函数
void idiom_question(int number, IDIOM* idioms);//出题函数
char* DealIdiom(char *idiom);//成语处理(服务于出题函数)
void idiom_answer(IDIOM* answer_diom);//答题函数
int RandomNumber(int *count);//产生随机数函数
void menu_choice(int i, int* count, FILE* score_fp, IDIOM* idioms);//提供用户选择函数
score get_score(FILE* score_fp);//获取分数函数
void printf_score(score head);//打印分数函数
void menu_rule();//显示规则函数

main函数实现文件打开关闭

FILE* idiom_fp, * score_fp, * user_fp;

    user_fp = fopen("user.txt", "r+");
    if (user_fp == NULL)
    {
        printf("游戏数据包打开失败\n");
        exit(0);
    }
    idiom_fp = (fopen("idiom.txt", "r+"));
    if (idiom_fp == NULL)
    {
        printf("游戏数据包打开失败\n");
    }
    score_fp = (fopen("score.txt", "r+"));
    if (score_fp == NULL)
    {
        printf("游戏数据包打开失败\n");
    }
    get_user(user_fp);//用户登陆
    IDIOM* idioms = new IDIOM[1000]; 
    int count = GetIdiom(idioms, idiom_fp);//获取成语数据
    menu_choice(2, &count, score_fp,idioms);//用户选择函数
    fclose(idiom_fp); fclose(user_fp); fclose(score_fp);

头文件介绍:"user.h"

定义有链表user用以读取储存用户信息

{
    char name[20];
    char password[16];
    struct user* next;
}USERS, * users;

获取用户数据:void get_user(FILE* user_fp);
用户注册函数:void user_register(users user_head, FILE* user_fp);
格式检查函数:int fomat_check(char* str, int n);
格式检查函数:int user_name_check(users head, char* new_user_name);
保存信息函数:void users_save(users new_user, users user_head, FILE* user_fp);
用户登陆函数:void users_enter(users user_head);
检查登陆函数:int users_enter_check(users user, users user_head);

函数实现

结构体_第1张图片

2.2运行结果展示

登录界面

结构体_第2张图片

游戏界面

结构体_第3张图片

排名界面

未编写成功

你可能感兴趣的:(结构体)