大佬请进,期末作业,在线等,急!!!

974720161 2017-12-20 09:47:15
#include<stdio.h>
#include<string.h>
struct mail_info{
char name[10];
char number[11];
}MailList[3000];
void Insert(int*);
void Search(int);
void Update(int);
void Delete(int *);
void Show(int);
int main()
{
int i;
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",&i);
switch(i)
{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("错误选择!请重选");
break;}
}while(i!=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;
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;
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;
printf("请输入要删除的姓名:");
scanf("%s",&in_name);
for(i=0;i<*num;i++)
if(strcmp(MailList[i].name,&in_name)==0)
{for(j=i;j<*num;j++)
MailList[j]=MailList[j+1];
(*num)--;break;}
if(i==*num) printf("未找到可删除的姓名");
}
void Show(int num)
{
int i;
for(i=0;i<num;i++)
{
printf("姓名:%5s\n",MailList[i].name);
printf("电话号码:%5s\n",MailList[i].number);
}
}
想请问一下大佬,为什么我使用查询修改的功能,老是只能查三个英文字母或三个阿拉伯数字呢?超过就查不到,而且还查不了中文
...全文
239 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2017-12-20
  • 打赏
  • 举报
回复
#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,都是字符,而不是定义的字符串。因此都是有问题的。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧