2301_79683887 2023-11-28 16:34 采纳率: 70.6%
浏览 3
已结题

运行到这一步就运行不动了,怎么改啊?

img

-

#include <stdio.h>
#include <stdlib.h>
#define max 200
typedef char string[20];
typedef struct staff{
   int id;
   string name;
   string num;
   string email;
}staff;
//void query(staff s1[max],string name2);
void muea(){
   printf("*******菜单***************\n");
   printf("********1 查询************\n");
   printf("********2 修改************\n");
   printf("********3 添加************\n");
   printf("********4 删除************\n");
   printf("********5 打印************\n");
}
void muea2(){
   printf("*******菜单***************\n");
   printf("********1 姓名************\n");
   printf("********2 电话************\n");
   printf("********3 邮箱************\n");
   printf("********4 编号************\n");
   printf("********5 退出************\n");
}
void query(staff s1[max],string name2,int n){
     for(int i=0;i<n;i++){
        if(strcmp(s1[i].name,name2)==0){
            printf("%d %s %s %s",s1[i].id,s1[i].name,s1[i].num,s1[i].email);
            return ;
        }
     }
     printf("NOT FOUND!");
     return ;
}
void modify(staff *s1,string name2,int n){
    printf("请选择要修改的属性对应的编号\n");
    int c,id2;
    string name3,num3,email3;
    int h;
     for(int i=0;i<n;i++){
        if(strcmp(s1[i].name,name2)==0)
           h=i; }
    while(1){
        scanf("%d",&c);
        printf("输入要修改为的数据\n");
        switch(c){
           case 1:scanf("%s",&name3);
                  strcpy(s1[h].name,name3);
                  break;
           case 2:scanf("%s",&num3);
                   strcpy(s1[h].num,num3);
                   break;
           case 3:scanf("%s",&email3);
                   strcpy(s1[h].email,email3);
                   break;
           case 4:scanf("%d",&id2);
                   strcpy(s1[h].id,id2);
                   break;
           case 5:return ;

        }

    }

}
void add(staff *s1,int n){
   printf("输入要添加的员工的编号,姓名,电话号码,邮箱\n");
    scanf("%d %s %s %s",&s1[n].id,&s1[n].name,&s1[n].num,&s1[n].email);
    return ;
}
void del(staff *s1,int n,string name2){
    int k=0;
    for(int i=0;i<n;i++){
         if(strcmp(s1[i].name,name2)==0)
           k=i;
    }
    for(int j=k;j<n-1;j++){
        s1[j]=s1[j+1];
    }
    return ;
}
void print(staff *s1,int n){
   for(int i=0;i<n;i++){
     printf("%d %s %s %s",s1[i].id,s1[i].name,s1[i].num,s1[i].email);
   }
   return ;
}
int main()
{
    int n;
    printf("输入原通讯录人数:\n");
    scanf("%d",&n);
    printf("输入通讯录人员信息\n");
    staff s1[max];
    for(int i=0;i<n;i++){
            printf("输入第%d个员工的编号,姓名,电话号码,邮箱\n",i+1);
        scanf("%d %s %s %s",&s1[i].id,&s1[i].name,&s1[i].num,&s1[i].email);

    }
    printf("请输入修改次数\n");

    int m;
    scanf("%d",&m);
    printf("进行%d次修改\n",m);
    printf("请选择数字进行不同的操作\n");
     muea();
     int x;
     string name2;
    for(int i=0;i<m;i++){
    printf("请输入第%d次修改选择的数字以进行对应操作\n",i+1);
    scanf("%d ",&x);
    switch (x){
        case 1:printf("输入要查询的员工姓名\n");
               scanf("%s",&name2);
               query(s1,name2,n);
               break;
        case 2:printf("输入要修改的员工姓名\n");
               scanf("%s",&name2);
               modify(&s1,name2,n);
               break;
        case 3:add(&s1,n);
                n++;
                break;
        case 4:printf("输入要删除的员工姓名\n");
               scanf("%s",&name2);
               del(&s1,n,name2);
               n--;
               break;
        case 5: printf("打印通讯录\n");
               print(&s1,n);
               break;

    }
    }


    return 0;
}

  • 写回答

2条回答 默认 最新

  • threenewbee 2023-11-28 16:47
    关注

    scanf("%d ",&x);
    这里%d后面多了一个空格。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月6日
  • 已采纳回答 11月28日
  • 创建了问题 11月28日