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运行结果

登录界面

游戏界面

大作业总结

碰到问题及解决办法

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

小结

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

posted @ 2019-12-15 20:20  湛遥  阅读(187)  评论(0编辑  收藏  举报
/* 点击爆炸效果*/
/* 鼠标点击求赞文字特效 */ /*鼠标跟随效果*/