zoukankan      html  css  js  c++  java
  • 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大作业总结

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

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

  • 相关阅读:
    To select the file to upload we can use the standard HTML input control of type
    Cascading Menu Script using Javascript Explained
    网站首页head区代码规范
    轻松掌握 Java 泛型
    JDK 5.0 中的泛型类型学习
    如何在firefox下获取下列框选中option的text
    是同步方法还是 synchronized 代码? 详解多线程同步规则
    javascript select option对象总结
    Select的动态取值(Text,value),添加,删除。兼容IE,FireFox
    javascript在ie和firefox下的一些差异
  • 原文地址:https://www.cnblogs.com/Guangyang/p/12041631.html
Copyright © 2011-2022 走看看