创建一个test.c,Contact.h,Contact.c
test.c来写main函数
Contact.h来存放通讯录函数的实现
Contact.c来存放定义
创建一个通讯录:通讯录可以用来存放100个人的信息,可以实现增删查改的功能。
创建一个框架:
int main()
{
int input=0;
do
{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 0:
break;
default:
break;
}
} while (input);
return 0;
}
写一个menu菜单:
void menu()
{
printf("********************************\n");
printf("********1.add 2.del*******\n");
printf("********3.search 4.modify*****\n");
printf("********5.show 6.sort*******\n");
printf("********0.exit*********\n");
}
再写一个枚举,然后把分支语句里的case 用枚举的成员代替:
enum Option
{
ADD,
DEL,
SEARCH,
MODIFY,
SHOW,
SORT,
EXIT,
};
case ADD:
break;
case DEL:
break;
case SEARCH:
break;
case MODIFY:
break;
case SHOW:
break;
case SORT:
break;
case EXIT:
break;
default:
break;
写一个人的结构体:
struct People
{
char name[20];
int age;
char sex;
char tele[12];
char adder[30];
};
用#define:
#define MAX 100
#define MAX_Name 20
#define MAX_TELE 12
#define MAX_adder 30
变为:
char name[MAX_Name];
int age;
char sex;
char tele[MAX_TELE];
char adder[MAX_adder];
简化:用typedef重命名整个结构体,把struct people这个类型简化为:people;
typedef struct People
{
char name[MAX_NAME];
int age;
char sex;
char tele[MAX_TELE];
char adder[MAX_ADDER];
}People;
这样我们想存100个人的信息只需要调用一下people就可以了
创建一个sz变量,增加删除一个人的信息可以改变sz的值。
sz用来记录通讯录目前有多少个人的信息。
同时,每记录一个人的信息时,data数组也会变,比如我们记录了两个人的信息,data就变成了data[2]
我们把sz和data【100】整合起来,就是一个通讯录:data存放信息,sz记录变化。
在.h里面定义这个结构体
struct Contact
{
People data[100];
int sz;
};
main函数里面定义的sz和people data【100】可以删除了。
用Typedef简化为Contact:
typedef struct Contact
{
People data[100];
int sz;
}Contact;
Contact就是我们的通讯录类型了,我们可以用这个类型来往通讯录里写信息了。
首先我们要保证通讯录里面是空的,也就是要对其进行初始化。
con是一个结构体变量,我们传形参,实参修改是不会影响形参的,所以我们传地址
我们可以验证一下:
sz初始化了,接下来把data初始化
为什么报错了呢?
因为data是一个数组,数组名就是地址,地址怎么可能初始化为0呢,我们应该对data所指向的people结构体里面存储的全部信息初始化为0
memset的用法:
调试走起来:
我们可以发现data里面的数据全部初始化为0了