以上是全部代码。
- 其中显示联系人部分出现问题,在显示了联系人之后总是会跳出增加联系人,应该如何修改?
2.在删除联系人之后还会出现空白的信息,应该如何去除?
2.在删除联系人之后还会出现空白的信息,应该如何去除?
引自免费微信小程序:皆我百晓生
根据您提供的代码,我发现了几个问题,并给出了相应的修改建议。为了方便阅读,我将代码整理为一个完整的文件,同时对有问题的部分进行了注释。
#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) {
// ... 添加联系人功能实现
}
对于您的两个问题:
显示联系人部分出现问题,在显示了联系人之后总是会跳出增加联系人:
这是因为在main()
中的循环没有正确处理display_contacts()
后的逻辑。您只需要在循环内处理用户的选择,而不是在每次显示联系人后都执行add_contact()
。我已经移除了add_contact()
的调用,只保留了其他操作的处理。
在删除联系人之后还会出现空白的信息:
这可能是因为当删除联系人时,数组元素并未正确地更新。在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()
函数的格式编写其他函数。