求助!菜鸟一枚,正在拼题a刷题,这题想半天了不知道怎么错的

mmm木 2020-02-12 05:36:39
7-34 通讯录的录入与显示 题目 通讯录中的一条记录包含下述基本信息:朋友的姓名、出生日期、性别、固定电话号码、移动电话号码。 本题要求编写程序,录入N条记录,并且根据要求显示任意某条记录。 输入格式: 输入在第一行给出正整数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> #include<string.h> #include<stdlib.h> struct ifm{ char name[80]; char both[80]; char sex[10]; char dianhua[80]; char phone[80]; }; int main() { int n,i=0,num; scanf("%d",&n); while(getchar()!='\n')//处理scanf留下的换行符 continue; struct ifm uct[n]; while(i<n) { scanf("%s",uct[i].name); scanf("%s",uct[i].both); scanf("%s",uct[i].sex); scanf("%s",uct[i].dianhua); scanf("%s",uct[i].phone); while(getchar()!='\n')//处理scanf留下的换行符 continue; i++; } scanf("%d",&num); int a[num]; for(i=0;i<num;i++) { scanf("%d",&a[i]); } for(i=0;i<num;i++)//姓名 固话 手机 性别 生日 { if(a[i]<n) { printf("%s %s %s %s %s",uct[a[i]].name,uct[a[i]].dianhua,uct[a[i]].phone,uct[a[i]].sex,uct[a[i]].both); } else printf("Not Found"); if(i<num-1) printf("\n");//换行 以pta的尿性,保险起见最后一行不打换行符 } return 0; }
...全文
1152 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
牛不才 2020-02-12
  • 打赏
  • 举报
回复
问题是 输入的顺序错了
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct ifm {
	char name[80];
	char both[80];
	char sex[10];
	char dianhua[80];
	char phone[80];
};
int main()
{
	int n,i, num;
	scanf("%d", &n);
	getchar();//吃掉回车

	struct ifm *uct = (struct ifm*)malloc(sizeof(struct ifm)*n);
	for (i=0;i < n; i++)
	{
		//姓名 生日 性别 固话 手机 --这个顺序
		scanf("%s %s %s %s %s", 
			uct[i].name, uct[i].both, uct[i].sex,uct[i].dianhua, uct[i].phone);
		getchar();
	}

	scanf("%d", &num);
 	int *a= (int*)malloc(sizeof(int)*num);

	for (i = 0; i < num; i++)
	{
		scanf("%d", &a[i]);
	}
	for (i = 0; i < num; i++)//姓名 固话 手机 性别 生日
	{
		if (a[i] < n)
		{
			printf("%s %s %s %s %s\n", 
				uct[a[i]].name, uct[a[i]].dianhua, uct[a[i]].phone, uct[a[i]].sex, uct[a[i]].both);
		}
		else
			printf("Not Found\n");
	}

	free(uct);
	free(a);
	return 0;

}
输出 3 Chris 1984/03/10 F +86181779452 13707010007 LaoLao 1967/11/30 F 057187951100 +8618618623333 QiaoLin 1980/01/01 M 84172333 10086 3 0 1 2 Chris +86181779452 13707010007 F 1984/03/10 LaoLao 057187951100 +8618618623333 F 1967/11/30 QiaoLin 84172333 10086 M 1980/01/01
mmm木 2020-02-12
  • 打赏
  • 举报
回复
引用 3 楼 牛不才的回复:
好像没什么问题
我也觉得没什么问题,但是他系统说我错了两个测试点,想了好久我都快吐了 我决定跳过这题了
mmm木 2020-02-12
  • 打赏
  • 举报
回复
引用 1 楼 牛不才的回复:
2 1 7 输出2条数据 分别是 下标1的数据(存在) 下标7的数据(不存在,只有 0,1,2) 结果是对的呀
回复不了图片,这是pat给的三个测试点 0 sample 有查询越界 答案正确 1 最长字符串,最小N 答案错误 2 最大N,反复查询同一记录 答案错误
牛不才 2020-02-12
  • 打赏
  • 举报
回复
好像没什么问题
牛不才 2020-02-12
  • 打赏
  • 举报
回复
2 1 7 输出2条数据 分别是 下标1的数据(存在) 下标7的数据(不存在,只有 0,1,2) 结果是对的呀

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧