void xiugai() { FILE *fp; int m; struct xinxi *head2; struct xinxi *p,*pr; char dianhua[N]; char mima[N]; char chepaihao[N]; pr=p=head2=duqu2(); while(p!=NULL) { if(a1==p->dianhua) { printf("\t\t\t\t您的信息如下:\n"); printf("\t\t\t\t密码%s 车牌号:%s\n",p->mima,p->chepaihao); printf("请选择要修改的内容(1.密码,2.车牌号):\n"); scanf("%d",&m); if(m==1) { printf("\t\t\t\t请输入新密码:\n"); scanf("%s",&mima); strcpy(p->mima,mima); fp=fopen("用户信息.txt","w"); while(pr!=NULL) { fprintf(fp,"%s %s %s",pr->dianhua,pr->mima,pr->chepaihao); pr=pr->next; } fclose(fp); break; } else if(m==2) { printf("\t\t\t\t请输入新车牌号:\n"); scanf("%s",chepaihao); strcpy(p->chepaihao,chepaihao); fp=fopen("用户信息.txt","w"); while(pr!=NULL) { fprintf(fp,"%s %s %s",pr->dianhua,pr->mima,pr->chepaihao); pr=pr->next; } fclose(fp); break; } } p=p->next; } if(p==NULL) { printf("\t\t\t\t未找到该车型号的车辆信息!\n"); } }为什么错了
时间: 2024-02-27 10:59:04 浏览: 60
这段代码存在以下问题:
1. 函数内部定义的 head2 指针没有初始化,可能指向随机的内存地址,需要先赋值为 NULL 或者新建一个空的链表节点。
2. 在读取用户信息文件时,每行的末尾没有添加换行符,导致在保存用户信息时会出现多个信息写在同一行的情况。建议在读取时使用 fgets() 函数读取整行,然后再使用 sscanf() 函数分离出电话号码、密码和车牌号。
3. 在修改用户信息时,每次都需要重新打开文件,然后遍历整个链表写入文件,这样效率很低。可以先将文件全部读取到内存中,修改完后再一次性写入文件。
4. 在使用 scanf() 函数读取字符串时,不需要使用 & 符号,因为字符串本身就是一个指针。
以下是修改后的代码:
```
void xiugai() {
FILE *fp;
int m;
struct xinxi *head2;
struct xinxi *p, *pr;
char dianhua[N];
char mima[N];
char chepaihao[N];
head2 = (struct xinxi*)malloc(sizeof(struct xinxi));
head2->next = NULL;
pr = p = head2;
head2 = duqu2(head2);
printf("\t\t\t\t请输入手机号码:\n");
scanf("%s", dianhua);
while (p != NULL)
{
if (strcmp(dianhua, p->dianhua) == 0)
{
printf("\t\t\t\t您的信息如下:\n");
printf("\t\t\t\t密码:%s 车牌号:%s\n", p->mima, p->chepaihao);
printf("请选择要修改的内容(1.密码,2.车牌号):\n");
scanf("%d", &m);
if (m == 1)
{
printf("\t\t\t\t请输入新密码:\n");
scanf("%s", mima);
strcpy(p->mima, mima);
printf("\t\t\t\t密码修改成功!\n");
break;
}
else if (m == 2)
{
printf("\t\t\t\t请输入新车牌号:\n");
scanf("%s", chepaihao);
strcpy(p->chepaihao, chepaihao);
printf("\t\t\t\t车牌号修改成功!\n");
break;
}
}
p = p->next;
}
if (p == NULL)
{
printf("\t\t\t\t未找到该手机号码的用户信息!\n");
}
else
{
fp = fopen("用户信息.txt", "w");
p = head2->next;
while (p != NULL)
{
fprintf(fp, "%s %s %s\n", p->dianhua, p->mima, p->chepaihao);
p = p->next;
}
fclose(fp);
}
}
```
阅读全文