排序操作问题
#include<stdio.h>#include<string.h>
#define N 1000
static int i=0;
struct record{ //声明一个结构体,记录数据
char name[20];
char email[30];
char homeaddr[60];
char telephone[13];
}records[N];
//读文件
void Data_Up(struct record records[])
{
FILE *fp;
if((fp=fopen("record.txt","a+"))==NULL) //判断文件是否打开
{
printf("打开失败!\n");
return;
}
else
for(i=0;!feof(fp);i++)
{
fscanf(fp,"%s\t",&records[i].name);
fscanf(fp,"%s\t",&records[i].email);
fscanf(fp,"%s\t",&records[i].homeaddr);
fscanf(fp,"%s\t",&records[i].telephone); //读取文件中的内容
} fclose(fp);
}
//输出联系人
void Data_Show(int n){
printf("联系人姓名:%s",records[n].name);
printf("电话:%s",records[n].telephone); //输出联系人信息
printf("邮箱:%s",records[n].email);
printf("家庭住址:%s",records[n].homeaddr);
printf("\n");
}
//添加联系人
void Add_People(char name[20])
{ static int j=0;
i++,j++;
strcpy(records[j].name,name);
printf("\n请输入联系人的电子邮件:"); //添加新的联系人,电话,地址等
scanf("%s",records[j].email);
printf("\n请输入联系人的家庭地址:");
scanf("%s",records[j].homeaddr);
printf("\n请输入联系人的电话:");
scanf("%s",records[j].telephone);
printf("添加成功!\n");
}
//查询操作
int Search_Name(char namestr[20])
{
int j; /*不考虑同名的人*/
for(j=0;j<=i;j++)
{if(strcmp(namestr,records[j].name)==0)
break;
}
return j; /*返回联系人在数组中的下标*/
}
//修改操作
void change (char name [20])
{
int n,m;
char string [60];
n=Search_Name(name);
if (n>i){printf("您查找的联系人不存在!\n");return;}
Data_Show(n);
printf("请选择你要修改的资料:\n1->修改联系人姓名;\n2->修改联系人电子邮件;\n3->修改联系人地址;\n4->修改联系人电话;\n5->退出!\n\n");
scanf("%d",&m);
while(m!=5)
{
switch(m)
{
case 1:printf ("请输入新的姓名:");scanf("%s",string); //修改联系人姓名,电话等
strcpy(records[n].name,string);break;
case 2:printf ("请输入新的电子邮件:");scanf("%s",string);
strcpy(records[n].email,string);break;
case 3:printf ("请输入新的地址:");scanf("%s",string);
strcpy(records[n].homeaddr,string);break;
case 4:printf ("请输入新的电话:");scanf("%s",string);
strcpy(records[n].telephone,string);break;
case 5:return;
}
printf("请继续选择你要修改的资料:\n1->修改联系人姓名;\n2->修改联系人电子邮件;\n3->修改联系人地址;\n4->修改联系人电话;\n5->退出!\n\n");
scanf("%d",&m);
}
}
//删除操作
void DeletePeo()
{
char nametemp[20];
int tp,n;
if(i<1)
{printf("\n没有删除的记录\n");return;}
printf("请输入您要查找的联系人的姓名:");
scanf("%s",nametemp);
n=Search_Name(nametemp); //找出联系人在数组中存放的下标
if(n==-1)
{printf("查找失败!\n");return;}
printf("确认要删除吗?确认按1,否则按任意键返回上一级菜单!\n");
scanf("%d",&tp);
if(tp==1)
{
int j;
for(j=n+1;j<=i;j++)
{
strcpy(records[j-1].name,records[j].name);
strcpy(records[j-1].email,records[j].email); //运用字符串复制删掉要删除的联系人
strcpy(records[j-1].homeaddr,records[j].homeaddr);
strcpy(records[j-1].telephone,records[j].telephone);}
i--;/*联系人总数减1*/
}
else return;}
//保存数据
void Data_Save(struct record records[])
{
FILE *fp;
int j;
if((fp=fopen("record.txt","w"))==NULL) //判断文件是否打开
{
printf("保存失败!\n");
return;
}
for(j=0;j<100;j++)
{
fprintf(fp,"%s\t%s\t%s\t%s\t",records[j].name,records[j].telephone,records[j].homeaddr,records[j].email); //将联系人的信息保存到文本文件中
}
fclose(fp);
printf("保存完毕!\n");
}
//排序操作
void SortString(){
int j,n;
int m;
char shi[N];
for(m=0;m<i;m++){
shi[m]=m;
}
for(j=0;j<i-1;j++){
for(m=j+1;m<i;m++)
{
if(strcmp(records[j].name,records[m].name)<0)
{
shi[m]=j;
shi[j]=m;
}
}
}
for(m=0;m<=i;m++){
printf("%d\n",shi[m]);
Data_Show(shi[m]);
}
}
void main(){
int ch,m,n,ret;
char tp,nametemp[20];
Data_Up(records);/*把文件数据导入内存*/
i--;
printf("电子通讯录:\n");
printf("请选择您需要的操作:\n");
printf("1->修改;\n2->查看所有联系人;\n3->删除联系人;\n4->查询联系人;\n5->添加联系人;\n6->保存;\n7->排序输出;\n8->退出\n\n");
do{
ret=scanf("%d",&ch);
if(ch<1 || ch>8)
{
printf("输入有误!请重新输入:\n");
getchar();}
}while(ret!=1);
while(ch!=8){
switch(ch){
case 1:printf("请输入要修改的联系人姓名:");
scanf("%s",nametemp);
change(nametemp);break;
case 2:for(m=0;m<=i;m++)Data_Show(m);break;
case 3:DeletePeo();break;
case 4:printf("请输入你要查询的人的姓名:");
scanf("%s",nametemp);
n=Search_Name(nametemp);
if(n>i)printf("没有你要查找的联系人!\n");
else
Data_Show(n);break;
case 5:printf("请输入待添加的联系人的姓名:");
scanf("%s",nametemp);Add_People(nametemp);break;
case 6:printf("要保存数据吗?确定按8建,否则按任意键选择其他操作!\n");
scanf("%d",&tp);if(tp==8)
Data_Save(records);break;
case 7:SortString();break;
case 8:return;}
printf("1->修改;\n2->查看所有联系人;\n3->删除联系人;\n4->查询联系人;\n5->添加联系人;\n6->保存;\n7->排序输出;\n8->退出\n\n");
scanf("%d",&ch);
}
} 求大神帮忙解决,排序操作为什么有问题??