时光荏苒,其实来到CSDN已经三年了,期间一直没有创作过任何文章,因为感觉自己认知浅薄,而且佩服程皓大佬做技术的态度,做学问与做技术本质相同,讲究追根溯源,打破砂锅问到底的精神;鉴于本人三年前只会做一些停留在理论层面上的分析,学校教育与社会的发展严重脱节,很多深刻的理论其实也不过是带来精神层面的享受,除此之外,别无用处,可能偶尔有用的也就那么一两本书,以前觉得一件事要么不做,要么做到最好,后来发现不是每一件事都需要这样的态度,也是时候摆脱小镇做题家的身份了,今年开始成为一名不太合格的创作者,开始常年不断更新技术;
在自己创作的旅程中,已经吸引了400位粉丝的关注,他们的支持和鼓励推动着我不断前行,每篇文章的赞、评论和阅读量都是我前进的动力,为了方便大家阅读,所有的图片不加水印,同时也希望大家指出我的错误,思想只有碰撞,才会产生火花,如果我的文章帮助大家解决了问题,我也会很开心,通过博客,我还认识了许多志同道合的领域同行,我们相互学习,共同进步;
现在基本舍弃了一些枯燥乏味的理论学习,长达四年的理论学习已经足够支撑我走下去,现在只想深入的学习技术,学习就是我的生活,先将学的东西完全消化,然后再吐出来,这样的方式恰恰也是一篇优秀博客的来源,当然创作已经成为我生活中不可或缺的一部分;
我目前写的最好项目就是动态版本的通讯录的实现
//.contact.h文件
# include <stdio.h>
# include <string.h>
# include <assert.h>
# include <stdlib.h>
//建立菜单功能和选项的关联使用枚举;
enum Option
{
Exit,// 0
Add,// 1
Del,// 2
Search,//3
Modify,//4
Show //5
};
# define DEFAULT 3
#define Data_Max 1000
#define Name_Max 20
#define Sex_Max 5
#define Tele_Max 12
#define Addr_Max 30
typedef struct PeoInfo
{
char name[Name_Max];
int age;
char sex[Sex_Max];
char tele[Tele_Max];
char addr[Addr_Max];
}PeoInfo;
//动态版本
typedef struct Contact
{
PeoInfo *data;//可以存放1000个人的信息
int sz;//记录通讯录中已经保存的联系人的个数;
int capacity;//记录通讯录当前的最大容量;
}Contact;
//函数的声明
//初始化通讯录
void InitContact(Contact * pc);
//销毁通讯录
void DestoryContact(Contact* pc);
//增加联系人的信息
void AddContact(Contact * pc);
//显示通讯录中的信息
void ShowContact(const Contact * pc);
//删除指定联系人的信息
void DelContact(Contact *pc);
//查找指定联系人的信息
void SearchContact(const Contact* pc);
//修改联系人的相关信息
void ModContact(Contact* pc);
//contact.c文件
void DestoryContact(Contact* pc)
{
free(pc->data);
pc->data = NULL;
pc->capacity = 0;
pc->sz = 0;
printf("销毁成功\n");
}
//动态版本
void InitContact(Contact * pc)
{
assert(pc != NULL);
pc->sz = 0;
pc->capacity = DEFAULT;
pc->data = (PeoInfo *)malloc(pc->capacity*sizeof(PeoInfo));
if (pc->data == NULL)
{
perror("malloc");
return ;
}
memset(pc->data, 0, pc->capacity*sizeof(PeoInfo));
}
void check_capacity(Contact* pc)
{
if (pc->sz == pc->capacity)
{
PeoInfo* tmp = (PeoInfo*)realloc(pc->data, (pc->capacity + 2)*sizeof(PeoInfo));
if (tmp != NULL)
{
pc->data = tmp;
}
pc->capacity += 2;
printf("增容成功\n");
}
}
void AddContact(Contact * pc)
{
assert(pc != NULL);
//当通讯录数据存放满,进行扩容
check_capacity(pc);
//动态版本
//1.录入信息
printf("请输入名字: ");
scanf("%s", (pc->data[pc->sz]).name);
printf("请输入年龄: ");
scanf("%d", &(pc->data[pc->sz]).age);
printf("请输入性别: ");
scanf("%s", (pc->data[pc->sz]).sex);
printf("请输入电话号码: ");
scanf("%s", (pc->data[pc->sz]).tele);
printf("请输入地址: ");
scanf("%s", (pc->data[pc->sz]).addr);
//2.sz++;
pc->sz++;
printf("添加成功\n");
}
//显示通讯录中的信息
void ShowContact(const Contact * pc)
{
assert(pc != NULL);
int i = 0;
printf("%-20s %-5s %-5s %-12s %-30s\n", "姓名", "年龄", "性别", "电话", "地址");
for (i = 0; i < pc->sz; i++)
{
printf("%-20s %-5d %-5s %-12s %-30s\n", pc->data[i].name, pc->data[i].age,
pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);
}
}
int FindByName(const Contact* pc, char name[])
{
assert(pc != NULL);
int i = 0;
for (i = 0; i < pc->sz; i++)
{
//比较姓名—实际比较字符串—strcmp()函数
if (strcmp(pc->data[i].name, name) == 0)
{
return i;
}
}
//遍历完整个数组,仍然没有返回,说明找不到;
return -1;
}
//删除指定联系人的信息
void DelContact(Contact *pc)
{
assert(pc != NULL);
//如果通讯录里面元素为0,直接返回;
if (pc->sz == 0)
{
printf("通讯录已空,无法删除\n");
return;
}
//先根据姓名找到要删除的元素(不考虑重名)
char name[Name_Max] = { 0 };
printf("请输入姓名:");
scanf("%s", name);
//根据名字找到所对应的元素,找到了返回data数组的下标,找不到返回-1;
int pos = FindByName(pc, name);
if (pos == -1)
{
printf("联系人不存在,无法删除\n");
return;
}
//删除
//删除方法-要删除指定位置的元素,只需从指定位置开始,后一个元素覆盖掉前一个元素即可,依次进行;
int j = 0;
for (j = pos; j <pc->sz - 1; j++)
{
pc->data[j] = pc->data[j + 1];
}
pc->sz--;
printf("删除成功\n");
}
//查找指定联系人的信息
void SearchContact(const Contact* pc)
{
assert(pc != NULL);
char name[Name_Max] = { 0 };
printf("请输入查找人的姓名:");
scanf("%s", name);
int pos = FindByName(pc, name);
if (pos == -1)
{
printf("联系人不存在\n");
return;
}
//找到联系人,显示联系人相关信息;
printf("%-20s %-5s %-5s %-12s %-30s\n", "姓名", "年龄", "性别", "电话", "地址");
printf("%-20s %-5d %-5s %-12s %-30s\n", pc->data[pos].name, pc->data[pos].age,
pc->data[pos].sex, pc->data[pos].tele, pc->data[pos].addr);
}
//修改联系人的信息
void ModContact(Contact* pc)
{
assert(pc != NULL);
//先根据姓名查找要修改的元素
char name[Name_Max] = { 0 };
printf("请输入修改人的姓名:");
scanf("%s", name);
int pos = FindByName(pc, name);
if (pos == -1)
{
printf("联系人不存在\n");
return;
}
//重新输入该位置的信息;
printf("请输入名字: ");
scanf("%s", (pc->data[pos]).name);
printf("请输入年龄: ");
scanf("%d", &(pc->data[pos]).age);
printf("请输入性别: ");
scanf("%s", (pc->data[pos]).sex);
printf("请输入电话号码: ");
scanf("%s", (pc->data[pos]).tele);
printf("请输入地址: ");
scanf("%s", (pc->data[pos]).addr);
printf("修改成功\n");
}
因为本身具有硬件基础,从事过电路设计相关工作,现在倾向于深入的学习后端,包括嵌入式所用到的芯片架构的学习,不断扩展自己的知识面,操作系统以下将会是本人主要的学习路径,不断向下兼容,事情抱着百分的态度完成,结果任凭天意而定;