33,311
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<string.h>
struct mail_info{
char name[10];
char number[12];
} MailList[3000];
void Insert(int*);
void Search(int);
void Update(int);
void Delete(int *);
void Show(int);
int main()
{
int ch;
int num=0;
do
{
printf("\n");
printf("1---插入(Insert)\n");
printf("2---查询(Search)\n");
printf("3---修改(Update)\n");
printf("4---删除(Delete)\n");
printf("5---显示(Show)\n");
printf("6---退出(Exit)\n");
scanf("%d", &ch);
switch(ch)
{
case 1:
Insert(&num);
break;
case 2:
Search(num);
break;
case 3:
Update(num);
break;
case 4:
Delete(&num);
break;
case 5:
Show(num);
break;
case 6:
break;
default:
printf("错误选择!请重选");
}
} while(ch!= 6);
return 0;
}
void Insert(int *num)
{
int i=0;
if(*num>3000){printf("通讯录已满");return;}
printf("请输入姓名:");
scanf("%s",MailList[*num].name);
printf("请输入电话号码:");
scanf("%s",MailList[*num].number);
(*num)++;
}
void Search(int num)
{
int i;
char in_name[12];
printf("请输入要查找的姓名:");
scanf("%s", in_name);
for(i=0;i<num;i++)
if(strcmp(MailList[i].name, in_name)==0)
{
printf("姓名:%s\n",MailList[i].name);
printf("电话号码:%s\n",MailList[i].number);
break;
}
if(i >= num)
printf("没有查询到!");
}
void Update(int num)
{
int i;
char in_name[12];
printf("请输入要修改的姓名:");
scanf("%s", in_name);
for(i=0;i<num;i++)
if(strcmp(MailList[i].name, in_name)==0)
{printf("请重新输入新的姓名:");
scanf("%s",MailList[i].name);
printf("请重新输入新的电话号码:");
scanf("%s",MailList[i].number);
break;
}
if(i>=num)
printf("未查询到该姓名");
}
void Delete(int *num)
{
int i,j;
char in_name[12];
printf("请输入要删除的姓名:");
scanf("%s", in_name);
for(i=0;i<*num;i++)
if(strcmp(MailList[i].name, in_name)==0)
{
for(j=i;j < *num - 1;j++)
MailList[j]=MailList[j+1];
(*num)--;
break;
}
if(i >=*num)
printf("未找到可删除的姓名\n");
}
void Show(int num)
{
int i;
for(i=0;i<num;i++)
{
printf("姓名:%5s\n",MailList[i].name);
printf("电话号码:%5s\n",MailList[i].number);
}
}
参考一下吧
多出有问题,问题1,手机号一般是11位,但是作为字符串需要至少12个字节的字符数组,因为还需要一个'\0'占用一个字节;
问题2:每个函数里的in_name,都是字符,而不是定义的字符串。因此都是有问题的。