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


    1.本章学习总结

    1.1 学习内容总结

    • 结构体如何定义、成员如何赋值:
    1.常见的定义:
    struct student
    {
        int num;
        char name[20];
    }stu;
    //2.采用typedef
    typedef struct
    {
        int num;
        char name[20];
    }STU;
    STU stu;
    
    //对于赋值,需对指定成员进行赋值
    //如 1.
    stu.num=5;
    //此外,也可以直接对结构体赋值
    //如 
    STU stu1,stu2;
    stu1=stu2;
    
    
    • 结构体数组排序做法:
    //首先要定义结构体数组:
    
    //对于上述1:
    struct student
    {
        int num;
        char name[20];
    }stu[20];
    
    //上述2:
    //只需加上
    STU stu[20];
    
    //对于排序,通常是对结构体中某一成员进行对比。同样分为选择法和冒泡法,只是对比的成员的表示形式变了而已。。与其他不同的是,结构体可以赋值。
    
    • 结构体指针怎么用:
    //多是在调用函数时使用。此做法可降低传参的代价。
    
    //常见定义为:(以第一条中的结构为例)
    //1. struct student*();
    //2. STU *();
    
    • 共用体、枚举类型做法:
    //对于枚举,最常见的无非是如下类似的代码:
    enum week{ Mon, Tues, Wed, Thurs, Fri, Sat, Sun };
    //其中Mon到Sun依次从0开始赋值,即Mon=0;
    //类似于#define Mon 0;
    
    //共用体:
    //使用同一段内存单元存放不同类型的变量,或者说使几个不同的变量共享同一段内存的结构,称为“共用体”类型的结构,声明与定义如下:
    union Data{
        int n;
        char ch;
        double f;
    };
    union Data a, b, c;
    //其使用和结构体相似,但是初始赋值只能赋一个变量的值;
    //注意:
    //共用体占用的内存等于最长的成员占用的内存。同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。
    
    • 文件读写,文件中数据如何读进结构体数组:
    //对文件进行操作,最先需要的即是打开文件:
    FILE *fp;
    fp=fopen("文件名.txt","r+(此为操作方式)");
    //对于格式对齐的文件,将文件每一行数据存入一数组中
    //对于输入的方法也有多种
    fscanf(fp,"%s %d",name,&num);
    fgets(s,n,fp);
    //在通过对具体要求对数据进行处理在赋值到结构体;
    
    

    1.2 本章学习体会及代码量学习体会

    1.2.1 学习体会

    • 不是很难,只是刚开始对结构进行了解时有一些困惑,不过题目做着就迎刃而解了。

    1.2.2 代码累计

    • 就把PTA中结构题题目都做了,以及平常布置的作业。相对于标准也应是不会太多,但也不会少。

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

    2.1.文件介绍

    1.头文件介绍

    idiom.h

    • 具体的功能我都注释出来了,就不再详述了。
    • 代码截图

    2.函数实现文件介绍。

    文件1:成语Main.cpp

    • 主要功能:打开成语数据文件,并存入成语结构数组中。另外使用循环实现重复游戏。
    • 代码截图

    文件2:idiom.cpp

    • 主要函数:(输出及菜单函数不做解释)
    1.int GetIdiom(FILE* fp, IDIOM* number);//其功能为:获取成语数据并存入成语结构体数组,并返回成语的个数。
    


    2.int Login(IDIOM*number, int num); //功能:判断用户输入的用户及密码是否正确,会提示用户名错误或密码错误,并且只有五次机会。当输入正确时,将进行游戏。
    



    3.int ConsultIdiom(FILE* fp, IDIOM* number,int num); //功能 : 查询字典,目前仅支持精确查询。
    


    4.void IdiomGame(IDIOM*number,int num,char* name);//功能 : 进行出题,题型仅有随机的挖两个空。并计算得分后储存排名。
       * ** 我这里的出题通过两个随机数完成**
       * ** 由于成语均是四个字以上,所以我只考虑前四字的挖空。**
       * ** 前四个字在数组中占 0 1   2 3   4 5   6 7,所以我随机两个0或1的随机数。一个控制前两个字的挖空,一个控制后两个字的挖空**
       * ** 前一个随机数通过if (position1 = rand() % 2)position1++;  将其值控制为0 或 2,出题时将ask[position]跟ask[position+1]赋值为'_'即可**
       * ** 后一个随机数通过position2 = ((rand() % 2) + 2) * 2; 将其值控制为4 或 6,出题同上。
    



    5.SCORE* Updaterank(FILE*fpRc,char *name1, int mark1, int* usernumber); //功能 : 更新排名,在idiom函数中使用。这里用到了sprintf()函数,简单来讲,其就是将整数转为字符串。由于我排名结构中分数是为字符数组。所以我需要用到该函数。
    


    6.SCORE* Getrank(int *num,SCORE*rank);//功能 : 获取排名信息。
    


    2.2运行结果

    1.登录界面

    2.游戏界面

    3.排名界面


    2.3大作业总结

    遇到的问题

    • 1.储存的用户名即密码跟用户输入的用户名密码会差一个' ',导致用户密码错误。后来统一改用fgets。
    • 2.在出题的地方卡了有一会儿,位置的想法错了几次,不过最后列草稿还是写出来了。
    • 3.输出排名地方不知道为什么传回的结构指针中的内容没错,但一写入文件就乱了。一直在改,前后也忘了改了什么了,总之是解决了。

    小结

    • 这次的大作业相比于上次思路更清晰,并且写起代码来也比较轻松,可能是因为各格式比上次认真了不少,我觉得这也算是一种进步把。
  • 相关阅读:
    Integration Services学习(3):数据流任务(下) (转自游子吟)
    delete和truncate的区别
    Integration Services 学习(6):包配置 (转自游子吟)
    SSIS 学习(2):数据流任务(上) (转自游子吟)
    Integration Services 学习(5):容器 (转自游子吟)
    Integration Services 学习(4):变量和表达式 (转自游子吟)
    in与exist , not in与not exist 的区别
    SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY
    关于Reporting Services的Q&A
    SSIS 学习(1) 概要 (转自游子吟)
  • 原文地址:https://www.cnblogs.com/gdlkblue/p/12044313.html
Copyright © 2020-2023  润新知