标题:通讯录排序
只看楼主
黑暗骑士5DSB
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2020-3-23
结帖率:50%
 问题点数:0 回复次数:2 
通讯录排序
输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。

输入格式:
输入第一行给出正整数n(<10)。随后n行,每行按照“姓名 生日 电话号码”的格式给出一位朋友的信息,其中“姓名”是长度不超过10的英文字母组成的字符串,“生日”是yyyymmdd格式的日期,“电话号码”是不超过17位的数字及+、-组成的字符串。

输出格式:
按照年龄从大到小输出朋友的信息,格式同输出。

输入样例:
3
zhang 19850403 13912345678
wang 19821020 +86-0571-88018448
qian 19840619 13609876543

      
   
输出样例:
wang 19821020 +86-0571-88018448
qian 19840619 13609876543
zhang 19850403 13912345678


struct friend
{
char name[10];
int date;
char num[17];
};
int main ()
{
int i,j,n;
scanf("%d",&n);
struct friend f[n],m[n];
for(i=0;i<n;i++)
scanf("%s %d %s",&f[i].name,&f[i].date,&f[i].num);
for(i=0;i<n-1;i++)
{
for(j=i;j<n-1;j++)
{
if(f[i].date>f[j+1].date)
m[j]=f[i];
f[i]=f[j+1];
f[j+1]=m[j];
}
}
for(i=0;i<n;i++)
printf("%s %d %sn",f[i].name,f[i].date,f[i].num);
return 0;
}
我这个错哪了
搜索更多相关主题的帖子: 通讯录 生日 输出 date 格式 
2020-04-20 16:19
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
1,结构体中“char num[17];”数组少了,范例“+86-0571-88018448”就有17个字符,容纳它需要数组长度为18,所以定义成“char num[20];”比较合适。
2,结构体名称“struct friend”用“friend”不合适,c++环境里是关键字,编译会报错,建议统一修改成“struct friendly”或别的。
3,不清楚你的编译器支持的版本。不建议定义变长数组,所以“struct friend f[n],m[n];”建议修改成“struct friend f[100],m[100];”
4,排序中的变量交换应该在一起用{}括起来,修改如下:
if(f[i].date>f[j+1].date)
{
m[j]=f[i];
f[i]=f[j+1];
f[j+1]=m[j];
}

5,其他的问题不影响结果,比如用于交换的临时变量m不需要定义为数组,字符串输入不需要显式指明第一个元素地址。

[此贴子已经被作者于2020-4-20 17:08编辑过]


能编个毛线衣吗?
2020-04-20 17:06
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
姓名10个字节不够用
早点放弃这种奇怪的刚刚好的恶趣味

最后的 printf %sn 应该是 %s\n

https://zh.
2020-04-20 17:14



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-501151-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.355939 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved