当前位置: 首页 > news >正文

动漫电影做英语教学视频网站北京知名seo公司精准互联

动漫电影做英语教学视频网站,北京知名seo公司精准互联,福州网站建设网络公司排名,行业协会网站建设的目的一. 增加需求 在学习了动态开辟内存之后 我们对于通讯录产生了新的需求 要求我们做出一个动态增长的版本 即 随着我们储存联系人的增加 储存的空间增加 要求 : 1 初始空间为3 2 每次达到上限之后 扩容两个内存 二. 动手实施 我们首先要创建一个结构体 结构体…

一. 增加需求

在学习了动态开辟内存之后 我们对于通讯录产生了新的需求

要求我们做出一个动态增长的版本

即 随着我们储存联系人的增加 储存的空间增加

要求 :

1 初始空间为3
2 每次达到上限之后 扩容两个内存

二. 动手实施 

我们首先要创建一个结构体

结构体的代码暂定为这样子

typedef struct Contact
{PeoInfo* date;//存放人的信息int sz;//当前已经放的信息个数int capacity;//当前通信录的最大容量
}Contact;

 既然结构体改变了 那么我们的初始化也需要改变一下

void InitContact(Contact* pc)
{assert(pc);pc->sz = 0;PeoInfo* ptr = (PeoInfo*)calloc(DEFAULT_SZ, sizeof(PeoInfo*));if (ptr == NULL){perror("InitContact::calloc");return ;}pc->date = ptr;pc->capacity = DEFAULT_SZ;
}

这样我们就初始化出来了 一块新的空间

那么这个时候我们开始设计增加联系人的功能

主要思路就是 如果联系人到了上线的话 那么realloc增容上线+2

另外 上线也加上2

代码表示如下

void check_capacity(Contact* pc)
{if (pc->sz == pc->capacity){//增容PeoInfo* ptr = (PeoInfo*)realloc(pc->date, (pc->capacity + INC_SZ) * sizeof(PeoInfo));if (ptr == NULL){perror("check_capacity::realloc");}elsepc->date = ptr;pc->capacity += INC_SZ;printf("增容成功\n");}
}
//动态版本
void AddContact(Contact* pc)
{assert(pc);check_capacity(pc);//增加一个人的信息printf("请输入名字:>");scanf("%s", pc->date[pc->sz].name);printf("请输入年龄:>");scanf("%d", &(pc->date[pc->sz].age));printf("请输入性别:>");scanf("%s", pc->date[pc->sz].sex);printf("请输入地址:>");scanf("%s", pc->date[pc->sz].addr);printf("请输入电话:>");scanf("%s", pc->date[pc->sz].tele);pc->sz++;}

代码显示效果如下

三. 回收空间

其他要修改的地方只是一个回收动态开辟的空间 防止内存泄漏

void DestroyContact(Contact* pc)
{free(pc->date);pc->date = NULL;pc->capacity = 0;pc->sz = 0;pc = NULL;
}

代码很简单 只需要这样子就好啦

四. 所有代码文件

1. 头文件

#include<stdio.h>
#include<assert.h>
#include<string.h>
#include<stdlib.h>
#include<stdlib.h>#define MAX 100
#define MAX_NEME 20
#define MAX_SEX 5
#define MAX_ADDR 30
#define MAX_TELE 12
#define DEFAULT_SZ 3
#define INC_SZ 2//人的信息
typedef struct PeoInfo
{char name[MAX_NEME];int age;char sex[MAX_SEX];char addr[MAX_ADDR];char tele[MAX_TELE];
}PeoInfo;
//静态版本
//typedef struct Contact
//{
//	PeoInfo date[MAX];//存放人的信息
//	int sz;//当前已经放的信息个数
//}Contact;
//动态版本
typedef struct Contact
{PeoInfo* date;//存放人的信息int sz;//当前已经放的信息个数int capacity;//当前通信录的最大容量
}Contact;

2. 主函数文件

void memu()
{printf("********************************\n");printf("*****   1.add     2.del    *****\n");printf("*****   3.search  4.modify *****\n");printf("*****   5.show    6.sort   *****\n");printf("*****   0.exit             *****\n");printf("********************************\n");
}
enum Option
{EXIT,ADD,DEL,SEARCH,MODIFY,SHOW,SORT
};
void test()
{int input = 0;//创建通信录Contact con;//初始化通信录InitContact(&con);do{memu();printf("请选择:>");scanf("%d", &input);switch (input){case ADD:AddContact(&con);break;case DEL:DelContact(&con);break;case SEARCH:SearchContact(&con);break;case MODIFY:ModityContact(&con);break;case SHOW:ShowContact(&con);break;case SORT://SortContact(&con);break;case EXIT:DestroyContact(&con);printf("退出通信录\n");break;default:printf("选择错误,请重新选择\n");break;}} while (input);
}
int main()
{test();return 0;
}

3. 测试文件

#define _CRT_SECURE_NO_WARNINGS
#include"contact.h"
//静态版本
//void InitContact(Contact* pc)
//{
//	assert(pc);
//	pc->sz = 0;
//	memset(pc->date, 0, sizeof(pc->date));
//}
//动态版本
void InitContact(Contact* pc)
{assert(pc);pc->sz = 0;PeoInfo* ptr = (PeoInfo*)calloc(DEFAULT_SZ, sizeof(PeoInfo*));if (ptr == NULL){perror("InitContact::calloc");return ;}pc->date = ptr;pc->capacity = DEFAULT_SZ;
}//静态版本
//void AddContact(Contact* pc)
//{
//	assert(pc);
//	if (pc->sz == MAX)
//	{
//		printf("通信录已满,无法添加\n");
//		return ;
//	}
//	//增加一个人的信息
//	printf("请输入名字:>");
//	scanf("%s", pc->date[pc->sz].name);
//	printf("请输入年龄:>");
//	scanf("%d", &(pc->date[pc->sz].age));
//	printf("请输入性别:>");
//	scanf("%s", pc->date[pc->sz].sex);
//	printf("请输入地址:>");
//	scanf("%s", pc->date[pc->sz].addr);
//	printf("请输入电话:>");
//	scanf("%s", pc->date[pc->sz].tele);
//	pc->sz++;
//
//}void check_capacity(Contact* pc)
{if (pc->sz == pc->capacity){//增容PeoInfo* ptr = (PeoInfo*)realloc(pc->date, (pc->capacity + INC_SZ) * sizeof(PeoInfo));if (ptr == NULL){perror("check_capacity::realloc");}elsepc->date = ptr;pc->capacity += INC_SZ;printf("增容成功\n");}
}
//动态版本
void AddContact(Contact* pc)
{assert(pc);check_capacity(pc);//增加一个人的信息printf("请输入名字:>");scanf("%s", pc->date[pc->sz].name);printf("请输入年龄:>");scanf("%d", &(pc->date[pc->sz].age));printf("请输入性别:>");scanf("%s", pc->date[pc->sz].sex);printf("请输入地址:>");scanf("%s", pc->date[pc->sz].addr);printf("请输入电话:>");scanf("%s", pc->date[pc->sz].tele);pc->sz++;}void DestroyContact(Contact* pc)
{free(pc->date);pc->date = NULL;pc->capacity = 0;pc->sz = 0;pc = NULL;
}void ShowContact(const Contact* pc)
{assert(pc);int i = 0;printf("%-20s\t%-4s\t%-5s\t%-20s\t%-12s\n", "名字", "年龄", "性别", "地址", "电话");for (i = 0; i < pc->sz; i++){printf("%-20s\t%-4d\t%-5s\t%-20s\t%-12s\n", pc->date[i].name,pc->date[i].age,pc->date[i].sex,pc->date[i].addr,pc->date[i].tele);}
}int FindByName(Contact* pc, char name[])
{int i = 0;for (i = 0; i < pc->sz; i++){if (strcmp(pc->date[i].name, name) == 0){return i;}}return -1;
}void DelContact(Contact* pc)
{assert(pc);int i = 0;char name[MAX_NEME];if (pc->sz == 0){printf("通讯录为空,无法删除\n");}printf("请输入要删除人的名字:>");scanf("%s", &name);int del = 0;//找到删除人的名字int ret = FindByName(pc, name);if (-1 == ret){printf("要删除的人不存在\n");}//删除for (i = ret; i < pc->sz - 1; i++){pc->date[i] = pc->date[i + 1];}pc->sz--;printf("删除成功\n");
}void SearchContact(const Contact* pc)
{char name[MAX_NEME] = { 0 };printf("请输入查找人的名字:>");scanf("%s", &name);int pos = FindByName(pc, name);if (-1 == pos){printf("查找人的信息不存在\n");return ;}//打印信息printf("%-20s\t%-4s\t%-5s\t%-20s\t%-12s\n", "名字", "年龄", "性别", "地址", "电话");printf("%-20s\t%-4d\t%-5s\t%-20s\t%-12s\n", pc->date[pos].name,pc->date[pos].age,pc->date[pos].sex,pc->date[pos].addr,pc->date[pos].tele);}void ModityContact(Contact* pc)
{assert(pc);char name[MAX_NEME] = { 0 };printf("请输入修改人的名字:>");scanf("%s", &name);int pos = FindByName(pc, name);if (-1 == pos){printf("修改人的信息不存在\n");return;}//录入信息printf("请输入名字:>");scanf("%s", pc->date[pos].name);printf("请输入年龄:>");scanf("%d", &(pc->date[pos].age));printf("请输入性别:>");scanf("%s", pc->date[pos].sex);printf("请输入地址:>");scanf("%s", pc->date[pos].addr);printf("请输入电话:>");scanf("%s", pc->date[pos].tele);printf("修改完成\n");
}//int cmp(void* a, void* b)
//{
//	Contact* p1 = (Contact*)a;
//	Contact* p2 = (Contact*)b;
//	return strcmp(p1->date->name, p2->date->name);
//}
//
//void SortContact(Contact* pc)
//{
//
//	qsort(pc, pc->sz, sizeof(Contact*), cmp);
//}

以上便是本文所有内容,如有错误请各位大佬不吝赐教,感谢留言

http://www.fp688.cn/news/158938.html

相关文章:

  • 个人网站做支付宝收款淘宝怎么优化关键词步骤
  • 个人是否可以做网站免费关键词优化工具
  • 吉林市做网站公司seowhy培训
  • 网站建设 推广什么意思策划营销推广方案
  • java页面设计浑江区关键词seo排名优化
  • 网站建设深圳亿联时代北京百度关键词排名
  • 网站开发的数据朝阳区搜索优化seosem
  • wordpress如何站点爱站网seo培训
  • 做教育类网站一般流程重庆网站推广联系方式
  • 做网站优化的话术网站提交入口
  • 有哪些网站是做采购招标的厦门百度推广怎么做
  • 免费网站空间百度上怎么免费开店
  • 重庆李健做网站网络营销怎么推广
  • 深圳市城乡建设部网站首页天津搜索引擎推广
  • 怎么做网站程序沈阳seo合作
  • 做微信网站公司中小企业管理培训班
  • 全景网站模版免费推广软件 推广帮手
  • 一级a做爰片免费网站偷拍厕所满十八岁可以申请abc认证吗
  • 邢台做网站的公司有那个本周的新闻大事10条
  • 苏州高端模板建站seo服务外包
  • 成品短视频app下载有哪些破解版网站seo推广seo教程
  • 建行官网网站贵阳做网络推广的公司
  • 为什么建设网银网站打不开长尾词挖掘
  • 图书翻页的动画 做网站启动用网上有卖网站链接的吗
  • 国外木屋建设网站搜狐财经峰会
  • 新手怎么建立自己网站网站推广策略
  • 南山建设网站网站推广系统
  • 织梦做的网站如何去掉index网络推广营销公司
  • 网站php文件上传51link友链
  • 装修网站怎么做的好处优秀的软文广告案例