Destiny_ing 2024-05-29 17:18 采纳率: 71%
浏览 0
已结题

这个功能出现问题,应该如何修改呢?

img

img

img

这个想
实现的功能就是把文件中的数据,
然后传递在程序里,
然后对文件数据进行增删查改的功能,
怎样实现呢,
现在一运行就啥也没有。
应该如何修改呢?

  • 写回答

2条回答 默认 最新

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

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

    根据您提供的代码,看起来是一个简单的C语言项目,用于操作联系人列表(通讯录)。它包含读取文件(duqv())和写回文件(sc())的功能,以及一系列对联系人的操作,如新建、显示、查找、删除和修改。目前的问题是运行后没有任何反应,可能是因为程序没有正确地执行文件读取或初始化工作。

    首先,让我们修复一下main()函数中的错误。在main()函数开始时,你需要为stu sz[max]txl qw分配内存,并且打开文件。同时,还需要在main()结束前关闭文件。这是修改后的main()函数:

    int main()
    {
        int max = 10; // 根据需求定义最大联系人数
        stu sz[max];
        txl qw;
        
        fp = fopen("结课设计.txt", "r");
        if (fp == NULL)
        {
            printf("无法打开文件\n");
            return -1;
        }
    
        duqv(sz, fp);
        fclose(fp);
    
        fp = fopen("data.txt", "w");
        if (fp == NULL)
        {
            printf("无法打开文件\n");
            return -1;
        }
        
        // ...其他代码保持不变...
    
        sc(sz, fp);
        fclose(fp);
        return 0;
    }
    

    接下来,我们需要检查duqv()函数,确保它能正确读取文件中的联系人信息。由于提供的代码片段缺少了结构体txl的定义,我将假设它有相应的成员变量与下面的代码匹配:

    typedef struct
    {
        char name[50];
        char sex[10];
        int dianhua;
        float year;
        char leibie[20];
    } txl;
    
    void duqv(stu sz[max], FILE *fp)
    {
        int i = 0;
        while (i < max && !feof(fp))
        {
            fscanf(fp, "%s %s %d %f %s", sz[i].name, sz[i].sex, &sz[i].dianhua, &sz[i].year, sz[i].leibie);
            i++;
        }
        qw.size = i;
    }
    

    现在,我们已经修复了文件读取部分。接下来,你需要确保每个操作函数(如xinjian()xianshi()等)都正常工作。这里只提供一个示例,您可以根据需要调整其他函数:

    void xinjian(txl *qw)
    {
        char new_name[50], new_sex[10];
        int new_dianhua;
        float new_year;
        char new_leibie[20];
    
        printf("请输入新联系人的姓名:");
        scanf("%s", new_name);
        printf("请输入新联系人的性别:");
        scanf("%s", new_sex);
        printf("请输入新联系人的电话号码:");
        scanf("%d", &new_dianhua);
        printf("请输入新联系人的年龄:");
        scanf("%f", &new_year);
        printf("请输入新联系人的分类:");
        scanf("%s", new_leibie);
    
        qw->size++;
        qw->sz[qw->size-1].name = malloc(strlen(new_name)+1);
        strcpy(qw->sz[qw->size-1].name, new_name);
        qw->sz[qw->size-1].sex = malloc(strlen(new_sex)+1);
        strcpy(qw->sz[qw->size-1].sex, new_sex);
        qw->sz[qw->size-1].dianhua = new_dianhua;
        qw->sz[qw->size-1].year = new_year;
        qw->sz[qw->size-1].leibie = malloc(strlen(new_leibie)+1);
        strcpy(qw->sz[qw->size-1].leibie, new_leibie);
    }
    

    其余的函数(xianshi()chazhao()shanchu()xiugai()tianjia())也需要类似地实现。确保它们的逻辑正确,并且在完成后更新文件。

    这样应该可以解决您的问题。不过,需要注意的是,这个程序还有许多潜在的问题,比如内存泄漏(当复制字符串时没有释放旧的内存),以及没有处理输入验证。为了使代码更加健壮,建议在实际开发中考虑这些问题。

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

报告相同问题?

问题事件

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

悬赏问题

  • ¥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画这种图吗