c语言通讯录排序按年龄从小到大输出

#include"stdio.h"
#define N 10
struct Date
{ int year;
int month;
int day;
};
struct Mate
{ char name[10];

long birthday;

char tel[12];
};
struct Mate classmate[N];
int Datecomp(struct Date d1,struct Date d2);//d1年龄比d2大返回1,相等返回0,小则返回-1
int main()
{ int i,j,k,n;
struct Mate m;
scanf("%d",&n);
for(i=0;i<n;i++) //输入n个同学的信息
{ scanf("%s",classmate[i].name);
scanf("%d-%d-%d",&classmate[i].birthday.year,&classmate[i].birthday.month,&classmate[i].birthday.day);
scanf("%s",classmate[i].tel);
}
for(i=0;i<n-1;i++) //按照年龄降序排列
{ k=i;//下面到对应大括号是我自己填的,不知道有没有问题

for(j=i+1;j<n;j++){
if(classmate[j].birthday<classmate[k].birthday) {
m=classmate[j];
classmate[j]=classmate[i];
classmate[i]=m;
}
}

if(k!=i)
{ m=classmate[i];
classmate[i]=classmate[k];
classmate[k]=m;
}
}
for(i=0;i<n;i++)
printf("name:%10s,%d-%d-%d,%12s\n",classmate[i].name,classmate[i].birthday.year,classmate[i].birthday.month,classmate[i].birthday.day,classmate[i].tel);
return 0;
}

int Datecomp(struct Date d1,struct Date d2)
{
//完全不知道填什么……
}

void sort(struct Man *p,int n){//p是数组第一元素指针,n是数组长度
int i,j,k;
struct Man t;
for(i=0;i<n;i++){
for(k=i,j=k+1;j<n;j++)
if(strcmp(p[k].Name,p[j].Name)>0)
k=j;
if(k!=i){//这里是k与i的关系而非j
t=p[k];//这里交换整个数组元素,不能只交换成员Name
p[k]=p[i];
p[i]=t;
}
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-10
void
sort(struct
Man
*p,int
n){//p是数组第一元素指针,n是数组长度
int
i,j,k;
struct
Man
t;
for(i=0;i
0)
k=j;
if(k!=i){//这里是k与i的关系而非j
t=p[k];//这里交换整个数组元素,不能只交换成员Name
p[k]=p[i];
p[i]=t;
}
}
}
相似回答