c语言实例020

大家好,我是一童;终于逃脱指针的魔爪,开始分享结构体啦,今天讨论的是简单的通讯录输入和输出;

简单介绍结构体

  1. 结构体由来:
    由于变量大多数是相互独立的,无内在联系,(如定义变量 a,b,c等),但在我们日常生活和工作中,有些数据是有内在联系的,他们成组出现;(如学生变量中包含 学号,姓名,性别,年龄等信息,将它们组成一个组合结构,使用起来就方便多了)

  2. 结构体定义 :
    建立不同类型数据组成的组合型的数据结构;

  3. 结构体一般形式
    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);
}

截图:

1

2

有看不懂或者需要优化的地方,欢迎下方留言!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值