1.为什么还是不能对文件内的数据进行增改查删等功能?
2.还需要如何修改?
3.为什么保存不到data.txt文件中?
应该如何修改来实现这个功能
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
在提供的代码中,有几个关键的问题导致了程序无法正常执行增、删、查、改以及保存到文件的功能。以下是详细的分析和修改建议:
- 文件读取和写入部分存在问题。
- 函数定义和调用的顺序不正确。
- 在某些函数中,使用指针访问数组时有误。
问题 1:文件读取和写入部分存在问题。
duqv()
和sc()
都没有正确地关闭文件,并且在sc()
中,你尝试使用qw.size
而不是max
来遍历数组。这会导致程序超出数组边界。另外,在sc()
函数中,你需要将&sz[i].year
改为sz[i].year
,因为%f
格式符不需要地址。问题 2:函数定义和调用的顺序不正确。在
main()
函数开始时,你应该先读取文件中的数据,然后再进入主循环。同时,为了简化代码,可以将读取和写入文件的操作合并到一个函数里,比如save_and_load()
。问题 3:在
xiugai()
函数中,你需要正确地更新索引并删除旧的联系人信息,然后调用xinjian()
函数来插入新的联系人信息。根据上述问题,下面是修改后的代码:
#include<stdio.h> #include<string.h> #include<stdlib.h> #define max 1000 typedef struct stu { char name[9]; char sex[9]; int dianhua; float year; char leibie[9]; } Stu; typedef struct txl { Stu sz[max]; int size; } Txl; void caidan(); void xinjian(Txl *qw); void xianshi(Txl qw); void chazhac(Txl *qw); void shanchu(Txl *qw); void xiugai(Txl *qw); void tianjia(Txl *qw); void save_and_load(Txl *qw, const char *read_filename, const char *write_filename); int main() { Txl qw; qw.size = 0; save_and_load(&qw, "结课设计.txt", "data.txt"); while (1) { // 循环使其持续出碗菜单 int n; caidan(); // 菜单函数 引用 scanf("%d", &n); switch (n) { case 1: xinjian(&qw); printf("建立成功。\n"); break; case 2: xianshi(qw); break; case 3: chazhac(&qw); break; case 4: shanchu(&qw); break; case 5: xiugai(&qw); break; case 6: tianjia(&qw); break; case 7: save_and_load(&qw, "data.txt", "结课设计.txt"); exit(0); break; default: printf("无效选项,请重新选择。\n"); break; } system("pause"); system("cls"); } return 0; } void caidan() { 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 xinjian(Txl *qw) { if (qw->size < max) { printf("名字:"); scanf("%s", qw->sz[qw->size].name); printf("性别:"); scanf("%s", qw->sz[qw->size].sex); printf("电话:"); scanf("%d", &qw->sz[qw->size].dianhua); printf("年龄:"); scanf("%f", &qw->sz[qw->size].year); printf("分类:"); scanf("%s", qw->sz[qw->size].leibie); qw->size++; } else { printf("联系人已满,无法添加新的联系人。\n"); } } void xianshi(Txl qw) { for (int i = 0; i < qw.size; i++) { printf("%s\t%s\t%d\t%f\t%s\n", qw.sz[i].name, qw.sz[i].sex, qw.sz[i].dianhua, qw.sz[i].year, qw.sz[i].leibie); } } void chazhac(Txl *qw) { char name[9]; printf("请输入你要查找的人的姓名:"); scanf("%s", name); for (int i = 0; i < qw->size; i++) { if (strcmp(qw->sz[i].name, name) == 0) { xianshi(*qw); break; } } if (i >= qw->size) { printf("未查找到相应联系人。\n"); } } void shanchu(Txl *qw) { char name[9]; printf("请输入你要删除联系人的姓名:"); scanf("%s", name); for (int i = 0; i < qw->size; i++) { if (strcmp(qw->sz[i].name, name) == 0) { for (int j = i; j < qw->size - 1; j++) { qw->sz[j] = qw->sz[j + 1]; } qw->size--; printf("已删除\n"); break; } } if (i >= qw->size) { printf("未查找到相应联系人。\n"); } } void xiugai(Txl *qw) { char name[9]; int i; printf("请输入你要修改的人的姓名:"); scanf("%s", name); for (i = 0; i < qw->size; i++) { if (strcmp(qw->sz[i].name, name) == 0) { printf("请输入新的名字:"); scanf("%s", qw->sz[i].name); printf("请输入新的性别:"); scanf("%s", qw->sz[i].sex); printf("请输入新的电话:"); scanf("%d", &qw->sz[i].dianhua); printf("请输入新的年龄:"); scanf("%f", &qw->sz[i].year); printf("请输入新的分类:"); scanf("%s", qw->sz[i].leibie); break; } } if (i >= qw->size) { printf("未找到相应的联系人"); } } void tianjia(Txl *qw) { int i; char name[9]; for (i = 0; i < qw->size; i++) { if (strcmp(qw->sz[i].name, name) == 0) { printf("已存在同名联系人。\n"); return; } } if (qw->size < max) { xinjian(qw); printf("联系人添加成功。\n"); } else { printf("联系人已满,无法添加新的联系人。\n"); } } void save_and_load(Txl *qw, const char *read_filename, const char *write_filename) { FILE *fp_read = fopen(read_filename, "r"); if (fp_read == NULL) { printf("无法打开文件\n"); exit(-1); } fclose(fp_read); FILE *fp_write = fopen(write_filename, "w"); if (fp_write == NULL) { printf("无法打开文件\n"); exit(-1); } for (int i = 0; i < qw->size; i++) { fprintf(fp_write, "%s\t%s\t%d\t%f\t%s\n", qw->sz[i].name, qw->sz[i].sex, qw->sz[i].dianhua, qw->sz[i].year, qw->sz[i].leibie); } fclose(fp_write); }
这个修改后的代码应该能解决你的问题。现在程序可以读取初始数据,执行增删查改功能,并且保存到指定的文件中。注意,如果你的原始数据文件(例如 "结课设计.txt")格式与上面的代码匹配,那么这段代码应该能正常工作。如果有不同的格式,可能需要进一步调整
save_and_load()
函数来适应实际的数据格式。解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥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画这种图吗