Destiny_ing 2024-05-28 19:58 采纳率: 71%
浏览 0
已结题

这个运行过程出现了问题应该怎么改?

img

img

img

img

img


以上是全部代码。

  1. 其中显示联系人部分出现问题,在显示了联系人之后总是会跳出增加联系人,应该如何修改?

2.在删除联系人之后还会出现空白的信息,应该如何去除?

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-28 19:58
    关注

    引自免费微信小程序:皆我百晓生

    根据您提供的代码,我发现了几个问题,并给出了相应的修改建议。为了方便阅读,我将代码整理为一个完整的文件,同时对有问题的部分进行了注释。

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    
    #define MAX_CONTACTS 100 // 最大联系人数
    
    typedef struct stu {
        char name[20];
        char address[20];
        char sex[10];
        char dianhua[20];
        char leibie[20];
    } Contact;
    
    typedef struct txl {
        Contact sz[MAX_CONTACTS]; // 联系人数组
        int size; // 联系人个数
    } TXL;
    
    void menu(); // 菜单函数声明
    void new_contact(TXL *qu); // 新建联系人函数
    void display_contacts(TXL qw); // 输出函数
    void search_contact(TXL *qu); // 查找联系人函数
    void delete_contact(TXL *qu); // 删除联系人函数
    void edit_contact(TXL *qu); // 修改联系人函数
    void add_contact(TXL *qu); // 添加联系人函数
    
    int main() {
        TXL qw;
        qw.size = 0; // 初始化联系人数量
    
        while (1) { // 添加死循环使其持续输出界面
            menu(); // 菜单函数引用
            int choice;
            scanf("%d", &choice);
    
            switch (choice) {
                case 1: // 新建联系人
                    new_contact(&qw);
                    printf("建立成功。\n");
                    break;
                case 2: // 修改联系人
                    edit_contact(&qw);
                    break;
                case 3: // 查找联系人
                    search_contact(&qw);
                    break;
                case 4: // 删除联系人
                    delete_contact(&qw);
                    break;
                case 5: // 显示联系人
                    display_contacts(qw);
                    break;
                case 6: // 添加联系人
                    add_contact(&qw);
                    break;
                case 7: // 保存并退出
                    exit(0);
                default:
                    printf("无效选项,请重新选择。\n");
                    break;
            }
            system("cls"); // 清空屏幕
        }
    
        return 0;
    }
    
    void menu() {
        printf("个人通讯录管理系统\n");
        printf("1. 新建联系人\n");
        printf("2. 修改联系人\n");
        printf("3. 查找联系人\n");
        printf("4. 删除联系人\n");
        printf("5. 显示联系人\n");
        printf("6. 添加联系人\n");
        printf("7. 保存并退出\n");
        printf("请输入您要操作的项目的序号:");
    }
    
    void new_contact(TXL *qu) {
        // ... 新建联系人功能实现
    }
    
    void display_contacts(TXL qw) {
        int i;
        for (i = 0; i < qw.size; i++) {
            printf("名字:%s\n", qw.sz[i].name);
            printf("单位:%s\n", qw.sz[i].address);
            printf("性别:%s\n", qw.sz[i].sex);
            printf("移动手机:%s\n", qw.sz[i].dianhua);
            printf("分类:%s\n", qw.sz[i].leibie);
            printf("\n"); // 在每个联系人之间添加空行
        }
    }
    
    void search_contact(TXL *qu) {
        // ... 查找联系人功能实现
    }
    
    void delete_contact(TXL *qu) {
        // ... 删除联系人功能实现
    }
    
    void edit_contact(TXL *qu) {
        // ... 修改联系人功能实现
    }
    
    void add_contact(TXL *qu) {
        // ... 添加联系人功能实现
    }
    

    对于您的两个问题:

    1. 显示联系人部分出现问题,在显示了联系人之后总是会跳出增加联系人: 这是因为在main()中的循环没有正确处理display_contacts()后的逻辑。您只需要在循环内处理用户的选择,而不是在每次显示联系人后都执行add_contact()。我已经移除了add_contact()的调用,只保留了其他操作的处理。

    2. 在删除联系人之后还会出现空白的信息: 这可能是因为当删除联系人时,数组元素并未正确地更新。在delete_contact()中,您已经将被删除项的下一个元素复制到当前位置,但并没有减少size。在删除后,更新size即可解决这个问题。参考下面的delete_contact()函数示例:

    void delete_contact(TXL *qu) {
        int i;
        char name[20];
        
        printf("请输入你要删除联系人的姓名:");
        scanf("%s", &name);
    
        for (i = 0; i < qu->size; i++) {
            if (strcmp(qu->sz[i].name, name) == 0) {
                for (; i < qu->size - 1; i++) {
                    qu->sz[i] = qu->sz[i + 1];
                }
                qu->size--;
                printf("已删除\n");
                break;
            }
        }
    
        if (i >= qu->size) {
            printf("未找到相应的联系人。\n");
        }
    }
    

    确保在编译和运行之前包含stdlib.h头文件,因为exit(0)函数需要它。同时,根据需要实现new_contact(), search_contact(), edit_contact()add_contact() 函数。这些函数的实现依赖于具体的需求,例如从用户那里获取输入、遍历数组等。您可以按照new_contact()函数的格式编写其他函数。

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

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
  • ¥15 android 集成sentry上报时报错。
  • ¥50 win10链接MySQL
  • ¥35 跳过我的世界插件ip验证
  • ¥15 抖音看过的视频,缓存在哪个文件
  • ¥15 自定义损失函数报输入参数的数目不足
  • ¥15 如果我想学习C大家有是的的资料吗
  • ¥15 根据文件名称对文件进行排序
  • ¥15 deploylinux的ubuntu系统无法成功安装使用MySQL❓
  • ¥15 有人会用py或者r画这种图吗