这个查找联系人的功能运行不了。
分不清->和.这两个符号的含义。
搞不懂指针的指向。
引自免费微信小程序:皆我百晓生
在您的代码中,查找功能的问题在于如何正确地比较字符串。在C语言中,我们不使用==
来比较两个字符串,而是使用strcmp()
函数。此外,还有几个小错误需要修正。下面是修复后的代码片段,主要集中在chazhao()
函数和xinjian()
函数中的输入部分。
首先,修复xinjian()
函数中的输入部分,将f(" 改为
printf(":
void xinjian(txl* qu) {
printf("名字:");
scanf("%s", qu->sz[qu->size].name);
printf("单位:");
scanf("%s", qu->sz[qu->size].address);
printf("性别:");
scanf("%s", qu->sz[qu->size].sex);
printf("移动手机:");
scanf("%s", qu->sz[qu->size].dianhua);
printf("分类:");
scanf("%s", qu->sz[qu->size].leibie);
qu->size++;
}
接下来,修复chazhao()
函数中的字符串比较部分,使用strcmp()
函数,并处理用户输入的字符串地址:
void chazhao(txl *qw) {
char name[90];
printf("请输入你要查找的人的姓名:");
scanf("%s", name);
for (int i = 0; i < qw->size; i++) {
if (strcmp(qw->sz[i].name, name) == 0) { // 使用 strcmp 进行字符串比较
xianshi(qw);
return; // 查找成功后返回,防止继续遍历
}
}
printf("未查找到相应联系人。");
}
除此之外,还需要在主函数中修正chazhao()
函数调用的缩进,将其与case 3:
对齐:
case 3:
chazhao(&qw);
break;
现在,查找功能应该可以正常工作了。以下是完整的修复后的代码:
#include<stdio.h>
#include<string.h>
#include<windows.h>
#define max 100 // 最大联系人数
struct stu {
char name[90];
char address[90];
char sex[90];
char dianhua[20];
char leibie[90];
};
struct txl {
struct stu sz[max]; // 联系人数组
int size; // 联系人个数
};
void caidan();
void xinjian(txl *qw);
void xianshi(txl qw);
void chazhao(txl *qw);
int main() {
txl qw; // 创建通讯录
qw.size = 0; // 个数初始化
while (1) { // 添加死循环使其持续出现菜单
caidan(); // 菜单函数 引用
scanf("%d", &n);
switch (n) {
case 1: // 新建联系人
xinjian(&qw);
printf("建立成功。\n");
system("pause"); // 暂停
system("cls"); // 清空屏幕
break;
case 2: // 修改联系人
case 3:
chazhao(&qw); // 注意这里已经修正了缩进
break;
case 4: // 删除联系人
case 5: // 显示联系人
xianshi(qw); // 输出函数
system("pause"); // 暂停
system("cls"); // 清空屏幕
break;
case 6: // 保存并退出
default:;
}
}
}
void xinjian(txl* qu) {
printf("名字:");
scanf("%s", qu->sz[qu->size].name);
printf("单位:");
scanf("%s", qu->sz[qu->size].address);
printf("性别:");
scanf("%s", qu->sz[qu->size].sex);
printf("移动手机:");
scanf("%s", qu->sz[qu->size].dianhua);
printf("分类:");
scanf("%s", qu->sz[qu->size].leibie);
qu->size++;
}
void xianshi(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);
}
}
void chazhao(txl *qw) {
char name[90];
printf("请输入你要查找的人的姓名:");
scanf("%s", name);
for (int i = 0; i < qw->size; i++) {
if (strcmp(qw->sz[i].name, name) == 0) { // 使用 strcmp 进行字符串比较
xianshi(qw);
return; // 查找成功后返回,防止继续遍历
}
}
printf("未查找到相应联系人。");
}
现在,您可以尝试编译并运行这段代码,查找功能应该能正常工作了。如果还有其他问题,请随时告诉我。