代码如下,当我输入
“z
15227036227
a
15227036227
b
13230602579
c
13230602579
d
134632026889”时运行接过如下,执行到最后z为什么不见了?
#include
#include
#define N 5
typedef struct {
char name[20];
char num[12];
}USER;
void getdata(USER* sp);
void getsort(USER* sp);
void outdata(USER *sp);
int main()//主函数
{
USER sp[N];
getdata(sp); outdata(sp);getsort(sp); putchar('\n');outdata(sp);printf("\n\n%s", sp[4].name);
return 0;
}
void getdata(USER* sp)//进行输入5个数据
{
int i;
for (i = 0; i < 5; i++)
scanf("%s%s", sp[i].name, sp[i].num);
}
void getsort(USER* sp)
{
int i, j;
char temp[20];
for (i=0;i<4;i++)
for(j=0;j<4-i;j++)
if (strcmp(sp[j].name, sp[j+1].name) > 0)//如果比后面一个名字大则替换两边数据
{ printf("%s交换%s\t", sp[j].name, sp[j+1].name);//在屏幕输出交换的双方
strcpy(temp, sp[j].name);
strcpy(sp[j].name, sp[j+1].name);
strcpy(sp[j+1].name, temp);
strcpy(temp, sp[j].num);
strcpy(sp[j].num, sp[j+1].num);
strcpy(sp[j+1].num, temp);
printf("%s已经和%s交换\t", sp[j+1].name, sp[j].name);//在屏幕输出已经交换成功了
}
}
void outdata(USER *sp)//进行输出5个数据
{
int i;
for (i = 0; i < 5; i++)
printf("\n%s:%s\n", sp[i].name, sp[i].num);
}
结构体里 char num[12]; 定义12位小了,输入最后的 d 134632026889 这里13位了,越界了,修改如下,供参考:
#include<stdio.h>
#include<string.h>
#define N 5
typedef struct {
char name[20];
char num [20]; //char num[12]; 修改
}USER;
void getdata(USER* sp);
void getsort(USER* sp);
void outdata(USER* sp);
int main()//主函数
{
USER sp[N];
getdata(sp);
outdata(sp);
getsort(sp);
putchar('\n');
outdata(sp);
printf("\n\n%s", sp[4].name);
return 0;
}
void getdata(USER* sp)//进行输入5个数据
{
int i;
for (i = 0; i < 5; i++)
scanf("%s %s", sp[i].name, sp[i].num);
}
void getsort(USER* sp)
{
int i, j;
char temp[20];
for (i = 0; i < 4; i++)
for (j = 0; j < 4 - i; j++)
if (strcmp(sp[j].name, sp[j + 1].name) > 0)//如果比后面一个名字大则替换两边数据
{
printf("%s交换%s\t", sp[j].name, sp[j + 1].name);//在屏幕输出交换的双方
strcpy(temp, sp[j].name);
strcpy(sp[j].name, sp[j + 1].name);
strcpy(sp[j + 1].name, temp);
strcpy(temp, sp[j].num);
strcpy(sp[j].num, sp[j + 1].num);
strcpy(sp[j + 1].num, temp);
printf("%s已经和%s交换\t", sp[j + 1].name, sp[j].name);//在屏幕输出已经交换成功了
}
}
void outdata(USER* sp)//进行输出5个数据
{
int i;
for (i = 0; i < 5; i++)
printf("\n%s:%s\n", sp[i].name, sp[i].num);
}