zoukankan      html  css  js  c++  java
  • c博客06-2019-结构体&文件

    1.本章学习总结

    1.1 学习内容总结

    结构概念和定义

    struct 结构名
    {
         类型名 结构成员名1;
         类型名 结构成员名2;
         ,,,,,,
    };
    struct是定义结构类型的关键字,后是一个合法的结构名;大括号内的成员被合在一起形成了一个新的数据类型;
    它里面的成员类型可以不同,比数组表示更加方便; 
    

    结构体定义初始化和使用

    常见的几种定义
    1.struct 结构名
    {
         类型名 结构成员名1;
         类型名 结构成员名2;
         ,,,,,,
    }s1,s2;//同时定义结构变量
    2.struct 结构名
    {
         类型名 结构成员名1;
         类型名 结构成员名2;
         ,,,,,,
    };
    struct 结构名 s1,s2;
    字符串赋值:调用库函数实现
             strcpy(s1.add,“厦门”);
             不能直接s1="厦门";
    结构变量整体赋值:
             s1=s2;//结构体中的结构类型必须相同
    

    结构变量作为函数参数

    int main()
    {
        s1.average=count_average(s1);
        double count_average(struct student s);
    }
    可以传输多个数据且形式简单,当是大型文件时效率较低
    

    结构数组

    结构数组定义
    struct student students[50];//定义了50个struct student类型的数组
    结构数组成员引用:结构数组名[下标].结构成员名
    两个结构数组也可以直接进行赋值:students[i]=students[j]
    

    结构体数组排序做法

    可以用选择排序法,冒泡法都可以,跟前面类似,这里只介绍选择法
    for(i=0;i<n-1;i++)
    {
        index=i;
        for(j=j+1;j<n;j++)
            if(student[j].average>student[index].average)
               index=j;
        temp=students[index];
        student[index]=student[i];
        student[i]=temp;
    }
    

    结构指针

    结构指针是指向结构类型吧变量的指针
    比如:
        struct student s1={101,"zhangyao",72,78,89},*p;
        p=&s1;//p指向结构成员的首地址
    指针访问成员:
    (*p).num=101;//必须要加(),因为.的优先级会高于*,从而产生错误;
     p->num=101;
    

    结构指针作为函数参数

    pos=score(students)
    int score(struct student *p)
    

    共用体、枚举类型做法

    枚举类型定义和初始化
        enum 枚举名{枚举值1,枚举值2,,,,,}变量列表;//编译程序从0开始逐个个枚举值赋值,逐个加1。有等号的作为该枚举值的值1
    typedf语句
          typedf struct{
               float z;
               float a;
          }STU;//给一个结构类赋予新的名字
    

    文件

    文件类型指针 
    FILE *fp;//不能进行fp++或*fp等操作,文件读写具有顺序性,前一个取出后,下一次取后一个
    打开文件:fp=fopen("文件名","打开方式")
    关闭文件:fclose(fp)
    字符方式文件读写fgetc()和fputc();
      ch=fgetc(fp);//从文件中读写一个字符到ch;
      fputc(ch,fp);//将ch这个字符写入文件中,失败返回EOF;
    字符串方式读写文件
      fputs(s,fp);//将文件中的字符串输出,成功返回最后输出的一个字符,失败返回EOF
      fgets(s,n,fp);//从文件中读字符串到s中,读取n个字符
    格式化方式读取文件
      fscanf(文件指针,格式化字符串,输入表);//比如:fscanf(fp,"%s",student.name),从文件中读取字符串到结构体中
      fprintf(文件指针,格式化字符串,输出表);//与上面类似,写入文件中
    rewind(FILE *fp)//使文件回到开头处
    fseek(fp,移动位置,何处移动)//移动位置
    ftell(文件指针)//获取位置
    feof(fp)//遍历文件
    

    1.2本章学习体会

    1.2.1这是这个学期最后一次作业了,也快要结束了我们的大一上的生活,在这学期中,专业课方面老师的基本要求我也努力做到最好。总的来说,也算基本了结了大学的基本节奏,在下学年我也会努力打好专业的基本功,为未来做铺垫
    1.2.2这周代码量405行

    2.综合作业--“我爱成语”(由于期末考试,就只写了注册登录,查询功能,后续会完善程序)

    2.1头文件介绍


    要求什么功能,结构体,图中有标识,就不一一介绍

    2.2函数实现文件介绍

    文件1:main.cpp


    主函数,架构程序

    文件2:登录函数.cpp


    用来做登录的函数,由菜单,注册,登录三个功能

    文件3:游戏函数.cpp


    用来做查询成语的函数,主要由精确查询和模糊查询两功能构成,读入输入的文字,找到与之相对应的字符,然后输出整个成语及意思

    2.2运行结果

    登录界面

    游戏界面

    大作业总结

    碰到问题及解决办法

    问题:密码数据中,由于需要对最后的
    进行判断,才能检验密码正确性,而最后一个成语没有
    ,导致最后一个成语读不到
    解决:我给最后一个成语加上了
    ,使它多了一行,最后的就能读到了
    问题:我写注册功能时,因为要检测账号的重复性,账号只能一个一个往后读,并不能跳行读,导致可能密码中有相同的也会提示重复
    解决:用fgets吸收掉除账号后,一行的其他密码数据,这样就能只检测账号了
    问题:注册账号时多位后便无法检测
    解决:只能注册两位,后面我觉得应该可以将输入的字符统计数量,进而灵活的吸收字符数,应该就可变成多位
    问题:刚开始注册功能编写时,直接将检测的文件打开复制了过来,导致一直写不进数据
    解决:检查后将r改成了a+,又可以读又可以写
    问题:在编写模糊查询时,只能读出第一个文字,两个两个字符写进去也不行,都出不来结果
    解决:我用了好几个fgets,将他们一个个吸收进去,一个个比较,麻烦是很麻烦,但还是解决了问题
    

    小结

    通过这次的大作业编写,从对文件的陌生到了初步了解,因为这部分也没有PTA可以做,但做了大作业后,也让我熟悉了文件怎么读写,怎么进行操作

  • 相关阅读:
    26.angularJS $routeProvider
    25.内置API
    24.路由
    iOS开发网络篇—数据安全
    从idea到ipo
    CentOS下php安装mcrypt扩展
    iOS客户端学习之AES加密
    PHP 标准AES加密算法类
    使用php扩展mcrypt实现AES加密
    base64的作用
  • 原文地址:https://www.cnblogs.com/200157zy/p/12041028.html
Copyright © 2011-2022 走看看