请问这道C语言的题哪里错了?

来源:百度知道 编辑:UC知道 时间:2024/06/08 05:00:16
读入5位用户的姓名(字符串)和电话号码(8位数字),输出这些用户的姓名和电话号码,并按电话号码由小到大的顺序排列,输出排列后用户的姓名和电话号码。

检查后没有错误,但运行后用户名是乱码,电话号码的也没按照冒泡法由小到大排列,请教各位哪里出问题了?最好能给出个完整的程序。拜谢了!

#include<stdio.h>
#define N 5

struct person
{
char name[20];
char phone[20];
}
main()
{
struct person num[N],k;
int i,j;
for(i=0;i<N;i++)
{
printf("input name:\n");
gets(num[i].name);
printf("input phone:\n");
gets(num[i].phone);
};

for(j=0;j<4;j++)
{
for(i=0;i<4-j;i++)
if(num[i].phone>num[i+1].phone)
{
k=num[i];
num[i]=num[i+1];
num[i+1]=k;
}
}
for(i=0;i<N;i++)
printf("%s\t\t%s\n",num[i].name[i],num[i].phone);
}

错误在程序里改过了,有注释

#include<stdio.h>
#include <string.h>

#define N 5

struct person
{
char name[20];
char phone[20];
}

main()
{
struct person num[N],k;
int i,j;
for(i=0;i<N;i++)
{
printf("input name:\n");
gets(num[i].name);
printf("input phone:\n");
gets(num[i].phone);
};

for(j=0;j<N-1;j++)
{
for(i=0;i<N-1-j;i++)
if(strcmp(num[i].phone,num[i+1].phone)>0) //c语言里字符串的比较不支持 >,要用比较函数
{
k=num[i];
num[i]=num[i+1];
num[i+1]=k;
}
}
for(i=0;i<N;i++)
printf("%s\t\t%s\n",num[i].name,num[i].phone); //这里num[i].name[i] 写错了,所以名字会乱码
}

for(j=0;j<4;j++)
{
for(i=0;i<4-j;i++)
if(num[i].phone>num[i+1].phone)
{
k=num[i];
num[i]=num[i+1];
num[i+1]=k;
} <