解释代码void chazhao2(lianxiren*head) {if(head==NULL) { printf("电话簿为空,请重新创建\n"); return; } char number[20]; printf("请输入电话号码:");gets(number); while(strcmp(number,head->number)!=0) {head=head->next; if(head==NULL){printf("电话簿未有此联系人\n"); return;} } printf("%s的主人为:",number); puts(head->name); printf("\n住址:");puts(head->home); printf("\n邮编:");puts(head->email); }//通过电话号码查找
时间: 2024-01-18 11:03:45 浏览: 21
这段代码实现了通过电话号码在一个链表中查找联系人信息的功能。首先判断链表是否为空,如果为空则输出提示信息并返回。然后通过 gets() 函数获取用户输入的电话号码,使用 while 循环遍历链表,查找与输入号码相同的联系人信息,如果找到则输出该联系人的姓名、住址和邮编信息。如果遍历完链表仍未找到,则输出提示信息表示电话簿中未有此联系人。需要注意的是,gets() 函数存在安全问题,建议使用 fgets() 替换。
相关问题
struct chexinxi *chazhao(struct chexinxi *head) { char chexinghao[N]; char chepaihao[N]; char chexinghao1[N]; char chepaihao1[N]; int n,m; struct chexinxi *p; p=head; printf("\t\t\t\t请选择查找方式(1.车型号,2.车牌号):"); scanf("%d",&n); if(n==1) { printf("\t\t\t\t请输入车型号:"); scanf("%s",chexinghao); while(p!=NULL) { if(strcmp(chexinghao,p->chexinghao)==0) { printf("\t\t\t\t车型号:%s 车牌号:%s\n",p->chexinghao,p->chepaihao); printf("\t\t\t\t是否进行修改(1.是,2.否):"); scanf("%d",&m); if(m==1) { printf("\t\t\t\t车型号:"); scanf("%s",&chexinghao1); strcpy(p->chexinghao,chexinghao1); printf("\t\t\t\t车牌号:"); scanf("%s",&chepaihao1); strcpy(p->chepaihao,chepaihao1); } break; } p=p->next; } if(p==NULL) { printf("\t\t\t\t未找到该车型号的车辆信息!\n"); } } else if(n==2) { printf("\t\t\t\t请输入车编号:"); scanf("%s",chepaihao); while(p!=NULL) { if(strcmp(chepaihao,p->chepaihao)==0) { printf("\t\t\t\t车型号:%s 车牌号:%s\n",p->chexinghao,p->chepaihao); break; } } if(p==NULL) printf("\t\t\t\t未找到该车牌号的车辆信息!\n"); } return head; }优化从文件中查找
可以将车辆信息保存到文件中,然后在程序运行时从文件中读取车辆信息,进行查找和修改操作。以下是一个示例代码,用于从文件中读取车辆信息,并实现车辆信息的查找和修改功能。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 20
struct chexinxi {
char chexinghao[N];
char chepaihao[N];
struct chexinxi *next;
};
void save(struct chexinxi *head) {
FILE *fp;
struct chexinxi *p;
p = head;
fp = fopen("chexinxi.txt", "w");
if (fp == NULL) {
printf("\t\t\t\t文件打开失败!\n");
exit(1);
}
while (p != NULL) {
fprintf(fp, "%s %s\n", p->chexinghao, p->chepaihao);
p = p->next;
}
fclose(fp);
}
struct chexinxi *load() {
FILE *fp;
struct chexinxi *head, *p, *q;
head = NULL;
fp = fopen("chexinxi.txt", "r");
if (fp == NULL) {
printf("\t\t\t\t文件打开失败!\n");
exit(1);
}
while (!feof(fp)) {
p = (struct chexinxi *)malloc(sizeof(struct chexinxi));
fscanf(fp, "%s %s", p->chexinghao, p->chepaihao);
p->next = NULL;
if (head == NULL) {
head = p;
} else {
q->next = p;
}
q = p;
}
fclose(fp);
return head;
}
struct chexinxi *chazhao(struct chexinxi *head) {
char chexinghao[N];
char chepaihao[N];
char chexinghao1[N];
char chepaihao1[N];
int n, m;
struct chexinxi *p;
p = head;
printf("\t\t\t\t请选择查找方式(1.车型号,2.车牌号):");
scanf("%d", &n);
if (n == 1) {
printf("\t\t\t\t请输入车型号:");
scanf("%s", chexinghao);
while (p != NULL) {
if (strcmp(chexinghao, p->chexinghao) == 0) {
printf("\t\t\t\t车型号:%s 车牌号:%s\n", p->chexinghao, p->chepaihao);
printf("\t\t\t\t是否进行修改(1.是,2.否):");
scanf("%d", &m);
if (m == 1) {
printf("\t\t\t\t车型号:");
scanf("%s", &chexinghao1);
strcpy(p->chexinghao, chexinghao1);
printf("\t\t\t\t车牌号:");
scanf("%s", &chepaihao1);
strcpy(p->chepaihao, chepaihao1);
save(head); // 保存修改后的车辆信息到文件中
}
break;
}
p = p->next;
}
if (p == NULL) {
printf("\t\t\t\t未找到该车型号的车辆信息!\n");
}
} else if (n == 2) {
printf("\t\t\t\t请输入车牌号:");
scanf("%s", chepaihao);
while (p != NULL) {
if (strcmp(chepaihao, p->chepaihao) == 0) {
printf("\t\t\t\t车型号:%s 车牌号:%s\n", p->chexinghao, p->chepaihao);
break;
}
p = p->next;
}
if (p == NULL)
printf("\t\t\t\t未找到该车牌号的车辆信息!\n");
}
return head;
}
int main() {
struct chexinxi *head;
int n;
head = load(); // 从文件中读取车辆信息
while (1) {
printf("\n\t\t\t\t请输入操作代码(1.查找车辆信息,2.退出程序):");
scanf("%d", &n);
if (n == 1) {
head = chazhao(head); // 查找车辆信息
} else if (n == 2) {
save(head); // 退出程序前,保存车辆信息到文件中
break;
}
}
return 0;
}
```
在这个示例代码中,我们通过 `load()` 函数从文件中读取车辆信息,并将其保存到一个链表中。在程序运行时,通过 `chazhao()` 函数实现车辆信息的查找和修改功能。当用户选择修改车辆信息时,我们将修改后的车辆信息保存到文件中,以便下次程序运行时能够读取到最新的车辆信息。在程序退出前,我们通过 `save()` 函数保存车辆信息到文件中。
struct chexinxi *chazhao(struct chexinxi *head) { char chexinghao[N]; char chepaihao[N]; char chexinghao1[N]; char chepaihao1[N]; int n,m; struct chexinxi *p; p=head; printf("\t\t\t\t请选择查找方式(1.车型号,2.车牌号):"); scanf("%d",&n); if(n==1) { printf("\t\t\t\t请输入车型号:"); scanf("%s",chexinghao); while(p!=NULL) { if(strcmp(chexinghao,p->chexinghao)==0) { printf("\t\t\t\t车型号:%s 车牌号:%s\n",p->chexinghao,p->chepaihao); printf("\t\t\t\t是否进行修改(1.是,2.否):"); scanf("%d",&m); if(m==1) { printf("\t\t\t\t车型号:"); scanf("%s",&chexinghao1); strcpy(p->chexinghao,chexinghao1); printf("\t\t\t\t车牌号:"); scanf("%s",&chepaihao1); strcpy(p->chepaihao,chepaihao1); } break; } p=p->next; } if(p==NULL) { printf("\t\t\t\t未找到该车型号的车辆信息!\n"); } } else if(n==2) { printf("\t\t\t\t请输入车编号:"); scanf("%s",chepaihao); while(p!=NULL) { if(strcmp(chepaihao,p->chepaihao)==0) { printf("\t\t\t\t车型号:%s 车牌号:%s\n",p->chexinghao,p->chepaihao); break; } } if(p==NULL) printf("\t\t\t\t未找到该车牌号的车辆信息!\n"); } return head; }优化查找文件内容
可以对该函数进行优化,提高其执行效率和代码质量。具体优化方法如下:
1. 减少重复输入。可以在函数开始时,先让用户选择查找方式,并根据不同的查找方式提示用户输入相应的信息,以避免用户重复输入信息。
2. 使用指针传参。可以将链表的头指针作为参数传入函数中,以便函数能够修改链表节点的值。
3. 简化逻辑结构。可以将两种查找方式分别写成两个函数,以减少函数的复杂度。
4. 增加错误处理机制。可以在函数中加入错误处理机制,以便在出现错误时能够及时提示用户并退出函数。
优化后的代码如下:
```
struct chexinxi* chaxun_chexinghao(struct chexinxi* head) {
char chexinghao[N];
char chexinghao1[N];
char chepaihao[N];
char chepaihao1[N];
int m;
printf("\t\t\t\t请输入车型号:");
scanf("%s", chexinghao);
struct chexinxi* p = head;
while (p != NULL) {
if (strcmp(chexinghao, p->chexinghao) == 0) {
printf("\t\t\t\t车型号:%s 车牌号:%s\n", p->chexinghao, p->chepaihao);
printf("\t\t\t\t是否进行修改(1.是,2.否):");
scanf("%d", &m);
if (m == 1) {
printf("\t\t\t\t车型号:");
scanf("%s", &chexinghao1);
strcpy(p->chexinghao, chexinghao1);
printf("\t\t\t\t车牌号:");
scanf("%s", &chepaihao1);
strcpy(p->chepaihao, chepaihao1);
}
return head;
}
p = p->next;
}
printf("\t\t\t\t未找到该车型号的车辆信息!\n");
return head;
}
struct chexinxi* chaxun_chepaihao(struct chexinxi* head) {
char chepaihao[N];
printf("\t\t\t\t请输入车牌号:");
scanf("%s", chepaihao);
struct chexinxi* p = head;
while (p != NULL) {
if (strcmp(chepaihao, p->chepaihao) == 0) {
printf("\t\t\t\t车型号:%s 车牌号:%s\n", p->chexinghao, p->chepaihao);
return head;
}
p = p->next;
}
printf("\t\t\t\t未找到该车牌号的车辆信息!\n");
return head;
}
struct chexinxi* chazhao(struct chexinxi* head) {
int n;
printf("\t\t\t\t请选择查找方式(1.车型号,2.车牌号):");
scanf("%d", &n);
if (n == 1) {
head = chaxun_chexinghao(head);
}
else if (n == 2) {
head = chaxun_chepaihao(head);
}
else {
printf("\t\t\t\t输入错误!\n");
}
return head;
}
```
优化后的代码结构更加清晰,易于阅读和维护,并且能够提高程序的执行效率和代码质量。