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

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

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

  • 相关阅读:
    CompletionService--实现并行获取future.get()结果
    ConcurrentHashMap+FutureTask实现高效缓存耗时较长的业务结果获取
    Exchanger--线程执行过程中交换数据
    线程池的处理流程
    CyclicBarrier--栅栏,挡住指定数量线程后一次放行
    Semaphore--信号量,控制并发线程数,如流量控制
    CountDownLatch---多线程等待
    线程安全相关概念
    SimpleDateFormat非线程安全
    记java.lang.NoSuchMethodError错误解决过程
  • 原文地址:https://www.cnblogs.com/Guangyang/p/12041631.html
Copyright © 2020-2023  润新知