qq_26388459 2015-09-13 13:51 采纳率: 0%
浏览 1507

电话号码本中的按值查找问题的调用函数问题

写的是一个电话号码簿,我想实现按值查找功能,查找后若找不到相同的元素则将该元素补齐后插入到原数组中,所以我调用后面的插入函数;若找到相同的元素则将这个一组元素打印出来,所以我调用了输出函数。问题是,这里的调用不行,可能是我调用错了,所以想问下怎么改?

include

include

include

#define ERROR 0
#define OK 1
#define RL 200

typedef struct{
char *name[RL];
char *phonenum[RL];
char *add[RL];
int TD_length;
}telephoneDirectory;

int creat_telephoneDirectory(telephoneDirectory *P, int Length)//创建电话簿
{
int i;
for (i = 0; i P->phonenum[i] = (char *)malloc(20 * sizeof(char));
printf("电话号码%d:", i + 1);
scanf("%s", P->phonenum[i]);
P->name[i] = (char *)malloc(Length * 20 * sizeof(char));
printf("姓名%d:", i + 1);
scanf("%s", P->name[i]);
P->add[i] = (char *)malloc(Length * 20 * sizeof(char));
printf("家庭住址%d:", i + 1);
scanf("%s", P->add[i]);
}
P->TD_length = Length;
return OK;
}

int Locatei(telephoneDirectory *p,int *pos)//查找操作
{
int i;
char LC_name[20] = { '\0' };
printf("请输入要查找的人物姓名: ");
scanf("%s", LC_name);
while (i<=p->TD_length&&p->name[i]! = LC_name)//元素依次比较
Inserti(telephoneDirectory *P); //调用插入算法,将新的用户信息插入到数组中
i++;
if(i<=p->TD_length){ //找到
*pos = i;
PrintfP(telephoneDirectory *P,p->phonenum[i],p->name[i],p->add[i]); //调用输出算法,输出找到的这组信息
}
return OK;
}

int Inserti(telephoneDirectory *P)//插入操作
{
int i, j;
char CR_phone[20] = { '\0' }, CR_name[20] = { '\0' }, CR_add[20] = { '\0' };
printf("请输入插入位置:");
scanf("%d", &i);
if (iP->TD_length + 1) return ERROR;
printf("请输入插入的电话号码:");
scanf("%s", CR_phone);
printf("请输入插入的姓名:");
scanf("%s", CR_name);
printf("请输入插入的家庭住址:");
scanf("%s", CR_add);
P->phonenum[P->TD_length] = (char *)malloc(20 * sizeof(char));
P->name[P->TD_length] = (char *)malloc(20 * sizeof(char));
P->add[P->TD_length] = (char *)malloc(20 * sizeof(char));
if (!P->phonenum[P->TD_length] || !P->name[P->TD_length] || !P->add[P->TD_length]) return ERROR;
for (j = P->TD_length; j >= i; j--){
//P->phonenum[j]=P->phonenum[j-1];
//P->name[j]=P->name[j-1];
strcpy(P->phonenum[j], P->phonenum[j - 1]);
strcpy(P->name[j], P->name[j - 1]);
strcpy(P->add[j], P->add[j - 1]);
}
strcpy(P->phonenum[i - 1], CR_phone);
strcpy(P->name[i - 1], CR_name);
strcpy(P->add[i - 1], CR_add);
P->TD_length++;
return OK;
}

int Deletei(telephoneDirectory *P)//删除操作
{
int i, j;
printf("请输入删除位置:");
scanf("%d", &i);
if (iP->TD_length) return ERROR;
for (j = i; j <= P->TD_length; j++){
P->phonenum[j - 1] = P->phonenum[j];
P->name[j - 1] = P->name[j];
P->add[j - 1] = P->add[j];
}
P->TD_length--;
return OK;
}

int Sorti(telephoneDirectory p)//排序操作
{
int i,j;
char temp;
for(i=0;i<=p->TD_length;i++){
for(j=0;j<=p->TD_length-j-1;j++){
if(p->phonenum[i]>p->phonenum[i+1]){
temp=*p->phonenum[i+1];
p->phonenum[i+1]=p->phonenum[i];
p->phonenum[i]=&temp;
/
按照输入人物的名字排序
if(p->name[i]>p->name[i+1]){
temp=p->name[i+1];
p->name[i+1]=p->name[i];
p->name[i]=temp;
/
/
按照输入人物的家庭住址排序
if(p->add[i]>p->add[i+1]){
temp=p->add[i+1];
p->add[i+1]=p->add[i];
p->add[i]=temp;
*/
}
}
}
return OK;
}

int PrintfP(telephoneDirectory *P)//输出
{
int i;
printf("电话簿目前存储数量为:%d\n", P->TD_length);
for (i = 0; iTD_length; i++){
printf("电话号码%d:%s 姓名%d:%s 家庭住址%d:%s\n", i + 1, P->phonenum[i], i + 1, P->name[i], i + 1, P->add[i]);
}
return OK;
}

int main()
{
int length, operation;
telephoneDirectory Q;
printf("创建电话簿\n\n请输入电话簿用户数量:");
scanf("%d", &length);
creat_telephoneDirectory(&Q, length);
while (1){
printf("请选择您想对电话簿进行的操作:\n1、locate(查找).\n2、delete(删除).\n3、insert(插入).\n4、sort(排序).\n5、printfP(输出).\n6、end(结束).\n\n");
printf("请选择您要进行的操作:");
scanf("%d", &operation);
printf("\n");
if (operation == 6) break;
if (operation == 5){
PrintfP(&Q);
}
if(operation == 4){
Sorti(&Q);
}
if (operation == 3){
Inserti(&Q);
}
if(operation == 2){
Deletei(&Q);
}
if (operation == 1){
Locatei(&Q);
}
}
// free(&Q);
return 0;
}

  • 写回答

1条回答 默认 最新

  • devmiao 2015-09-14 23:42
    关注
    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!