通讯录的录入与显示(从相似度0.98到后来成功,但是不知道为什么,后来知道错在了生日01月的表示方法上了)

本文介绍了如何处理包含姓名、生日、性别等信息的通讯录记录,强调了日期格式在输入和输出时的重要性。在处理过程中,由于生日的01月被错误地转换为1月,导致程序出错,最终通过将日期转换为字符串格式解决了问题。在MOOC讨论区发现这个问题是由于%d格式化指示符造成的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结构
第4题
【描述】
通讯录中的一条记录包含下述基本信息:朋友的姓名、出生日期、性别、固定电话号码、移动电话号码。本题要求编写程序,录入N条记录,并且根据要求显示任意某条记录。

【输入】
输入在第1行给出正整数N(<=10);随后N行,每行按照格式“姓名 生日 性别 固话 手机”给出一条记录。其中“姓名”是不超过10个字符、不包含空格的非空字符串;生日按“yyyy/mm/dd”的格式给出年月日;性别用“M”表示“男”、“F”表示“女”;“固话”和“手机”均为不超过15位的连续数字,前面有可能出现“+”。

在通讯录记录输入完成后,最后一行给出正整数K,并且随后给出K个整数,表示要查询的记录编号(从0到N-1顺序编号)。数字间以空格分隔。

【输出】
对每一条要查询的记录编号,在一行中按照“姓名 固话 手机 性别 生日”的格式输出该记录。若要查询的记录不存在,则输出“Not Found”。

【输入示例】
3

Chris 1984/03/10 F +86181779452 13707010007

LaoLao 1967/11/30 F 057187951100 +8618618623333

QiaoLin 1980/01/01 M 84172333 10086

2 1 7

【输出示例】
LaoLao 057187951100 +8618618623333 F 1967/11/30

Not Found






#include<stdio.h>

struct list{
	char name[11];
	int year,month,day;
	char SEX;
	char telphone[17],mobile[17];
	
};
int main()
{
	int n,k,i=0,t;
	struct list l[10];
	scanf("%d",&n);
	t=n;
	while(n--){
		scanf("%s %d/%d/%d %c %s %s",&l[i].name,&l[i].year,&l[i].month,&l[i].day,&l[i].SEX,&l[i].telphone,&l[i].mobile);
		i++;
	}
	scanf("%d",&k);
	i=0;
	while(k--){
		scanf("%d",&n);
		if(n>t-1)
			printf("Not Found\n");
		else
		printf("%s %s %s %c %d/%d/%d\n",l[n].name,l[n].telphone,l[n].mobile,l[n].SEX,l[n].year,l[n].month,l[n].day);
	}
	return 0;
} 
上面是分次输出

下面是最后一起输出。但是相似度都是0.98


#include<stdio.h>

struct list{
	char name[11];
	int year,month,day;
	char SEX;
	char telphone[17],mobile[17];
	
};
int main()
{
	int n,k,i=0,t,num[100];
	struct list l[10];
	scanf("%d",&n);
	t=n;
	while(n--){
		scanf("%s %d/%d/%d %c %s %s",&l[i].name,&l[i].year,&l[i].month,&l[i].day,&l[i].SEX,&l[i].telphone,&l[i].mobile);
		i++;
	}
	scanf("%d",&k);
	i=0;
	while(k--){
		scanf("%d",&num[i]);
		i++;
	}
	for(n=0;n<i;n++){
	if(num[n]>t-1)
		printf("Not Found\n");
	else
		printf("%s %s %s %c %d/%d/%d\n",l[num[n]].name,l[num[n]].telphone,l[num[n]].mobile,l[num[n]].SEX,l[num[n]].year,l[num[n]].month,l[num[n]].day);
	}
	return 0;
} 




最后把生日变成字符串形式就成功了,但是不知道为什么

<pre name="code" class="plain">#include<stdio.h>

struct list{
	char name[11];
	char birth[20];
	char SEX;
	char telphone[17],mobile[17];	
};
int main()
{
	int n,k,i=0,t,num[10];
	struct list l[10];
	scanf("%d",&n);
	t=n;
	while(n--){
		scanf("%s %s %c %s %s",&l[i].name,&l[i].birth,&l[i].SEX,&l[i].telphone,&l[i].mobile);
		i++;
	}
	scanf("%d", &k);
	i=0;
	while(k--){
		scanf("%d",&num[i]);
		i++;
	}
	for(n=0;n<i;n++){
	if(num[n]>t-1||num[n]<0)
		printf("Not Found\n");
	else
		printf("%s %s %s %c %s\n",l[num[n]].name,l[num[n]].telphone,l[num[n]].mobile,l[num[n]].SEX,l[num[n]].birth);
	}
	return 0;
}




最后在MOOC讨论区中发现了,原来是我的生日如果用%d表示,那么01月就会变成1月,不符合题目要求!!



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值