大家好,我是一童;终于逃脱指针的魔爪,开始分享结构体啦,今天讨论的是简单的通讯录输入和输出;
简单介绍结构体
-
结构体由来:
由于变量大多数是相互独立的,无内在联系,(如定义变量 a,b,c等),但在我们日常生活和工作中,有些数据是有内在联系的,他们成组出现;(如学生变量中包含 学号,姓名,性别,年龄等信息,将它们组成一个组合结构,使用起来就方便多了) -
结构体定义 :
建立不同类型数据组成的组合型的数据结构; -
结构体一般形式
struct 结构体名
{成员列表};
代码:
#include <stdio.h>//通讯录的输入和输出
#include <string.h>
#include <stdlib.h>
#define Z 20
#define P 20
#define N 1000
#define M 100
int Readaddr(struct addr*p);
void Writeaddr(struct addr*p);
struct addr//结构体
{
char *name;//名字
char *add;//地址
char *mail;//邮箱
char zip[Z];//邮政编码
char phone[P];//电话号
};
void main()
{
struct addr p[N];//定义数组包含成员列表
int i,j,n;
puts("\n");
puts("\t\t\t\t================通讯录================\n");
printf("请输入您要存联系人的个数:n = ");
scanf("%d",&n);
while(n<=0||n>N)
{
puts("您输入的个数不正确!请重新输入!");
printf("请输入您要存联系人的个数:n= ");
scanf("%d",n);
}
for(i=0;i<n;i++)
{
printf("输入联系人 No.%d ",i+1);
Readaddr(p+i);
puts("\n");
}
for(j=0;j<n;j++)
{
printf("输出联系人 No.%d ",j+1);
Writeaddr(p+j);
puts("\n");
}
}
int Readaddr(struct addr*p)//输入函数
{
int len;
char b[M];//字符串缓冲区
puts("请输入名字:");
if(scanf("%s",b)==1)
{
len=strlen(b);
p->name=(char*)malloc(len+1);
strcpy(p->name,b);
}
else
return 0;
puts("请输入地址:");
if(scanf("%s",b)==1)
{
len=strlen(b);
p->add=(char*)malloc(len+1);
strcpy(p->add,b);
}
else
{
free(p->name);
return 0;
}
puts("请输入邮箱:");
if(scanf("%s",b)==1)
{
len=strlen(b);
p->mail=(char*)malloc(len+1);
strcpy(p->mail,b);
}
else
{
free(p->name);
free(p->add);
return 0;
}
puts("请输入邮政编码:");
if(scanf("%s",b)==1)
{
strcpy(p->zip,b);
}
else
{
free(p->name);
free(p->add);
free(p->mail);
return 0;
}
puts("请输入电话:");
if(scanf("%s",b)==1)
{
strcpy(p->phone,b);
}
else
{
free(p->name);
free(p->add);
free(p->mail);
free(p->zip);
return 0;
}
return 1;
}
void Writeaddr(struct addr*p)//输出函数
{
printf("Name :%s\n",p->name);
printf("\t\tadd :%s\n",p->add);
printf("\t\tmail :%s\n",p->mail);
printf("\t\tzip :%s\n",p->zip);
printf("\t\tphone :%s\n",p->phone);
}
截图:
有看不懂或者需要优化的地方,欢迎下方留言!!