#include <stdio.h> #include <malloc.h> #include <string.h> #define N 20 struct xinxi *head1; struct xinxi *addxinxi(); void xianshi(struct xinxi *head1); int main() { head1=addxinxi(); xianshi(head1); return 0; } struct xinxi { char zhanghao[N]; char mima[N]; struct xinxi *next; }; struct xinxi *addxinxi() { char str[N]="0"; struct xinxi *p,*pr,*q; struct xinxi *head1; pr=p=(struct xinxi *)malloc(sizeof(struct xinxi)); printf("\t\t\t\t请输入以下信息(用户名或密码为0时退出):\n"); printf("\t\t\t\t用户名:"); scanf("%s",p->zhanghao); printf("\t\t\t\t密码:"); scanf("%s",p->mima); printf("\n"); head1=NULL; while(strcmp(p->zhanghao,str)!=0&&strcmp(p->mima,str)!=0) { if(head1==NULL) { head1=p; } else { p=p->next; pr=p; } p=(struct xinxi *)malloc(sizeof(struct xinxi)); printf("\t\t\t\t用户名:"); scanf("%s",p->zhanghao); printf("\t\t\t\t密码:"); scanf("%s",p->mima); printf("\n"); } pr->next=NULL; q=head1; FILE *fp; fp=fopen("账号密码.txt","w+"); if(q=NULL) { printf("\t\t\t\t无内容!\n"); } else { while(q!=NULL) { fprintf(fp,"%s %s",p->zhanghao,p->mima); q=q->next; } } fclose(fp); return head1; } void xianshi(struct xinxi *head1) { struct xinxi *p; p=head1; if(head1==NULL) { printf("无内容!"); } else { while(p!=NULL) { printf("\t\t\t\t用户名:%s 密码:%s\n",p->zhanghao,p->mima); p=p->next; } } return; }为什么错误
时间: 2024-01-20 22:03:14 浏览: 68
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
这段代码有一些问题:
1. 在函数`addxinxi()`中,判断条件应该是`strcmp(p->zhanghao,str)!=0 || strcmp(p->mima,str)!=0`,因为只有用户名和密码都为0时才退出循环。
2. 在函数`addxinxi()`中,`if(q=NULL)`应该是`if(q==NULL)`,因为`=`是赋值操作符,而`==`才是判断相等的操作符。
3. 在函数`addxinxi()`中,`fprintf(fp,"%s %s",p->zhanghao,p->mima)`应该是`fprintf(fp,"%s %s",q->zhanghao,q->mima)`,因为你要写入的是链表中节点的信息。
4. 在函数`addxinxi()`中,应该在每次添加新节点时,将其链接到链表的末尾,即`pr->next=p`。
5. 在函数`addxinxi()`中,应该在循环结束后,释放最后一个节点的内存,即`free(p)`。
6. 在函数`addxinxi()`中,应该在循环结束后,返回链表的头指针,即`return head1`。
7. 在函数`addxinxi()`中,应该在循环结束后,先关闭文件指针,再返回。
8. 在函数`addxinxi()`中,应该检查文件指针是否打开成功,即`if(fp==NULL)`,如果打开失败,应该返回空指针。
9. 在函数`xianshi()`中,可将`return;`改为`return;`,因为该函数没有返回值。
10. 在函数`xianshi()`中,应该将`if(head1==NULL)`改为`if(p==NULL)`,因为你要打印的是链表中的节点信息。
11. 在函数`xianshi()`中,应该将`printf("%s %s\n",p->zhanghao,p->mima);`改为`printf("\t\t\t\t用户名:%s 密码:%s\n",p->zhanghao,p->mima);`,因为你要按照一定的格式输出信息。
综上所述,修改后的代码如下:
阅读全文