解释代码lianxiren*load_list(lianxiren*head) {FILE *fp; if((fp=fopen("通讯录保存位置.dat","r+"))==NULL) {//dat printf("电话簿为空,请重新创建\n"); exit(0);} lianxiren*p1,*p2; p1=(lianxiren*)malloc(LEN); if(fread(p1,LEN,1,fp)==0) {printf("电话簿为空,请重新创建\n"); return head; } head=p1; p2=p1; p1=(lianxiren*)malloc(LEN); while(fread(p1,LEN,1,fp)) { p2->next=p1; p2=p1; p1=(lianxiren*)malloc(LEN); } p2->next=NULL; free(p1); return(head); fclose(fp); } //文件读取函数1 void duqu_list(lianxiren*head) {FILE *fp; if((fp=fopen("通讯录保存位置.txt","r+"))==NULL) {//dat printf("电话簿为空,请重新创建\n"); exit(0);} lianxiren*p1=head; p1=(lianxiren*)malloc(LEN); while(fscanf(fp,"%s\t\t%s\t\t%s\t\t%s\n",p1->name,p1->number,p1->home,p1->email)!=EOF){ printf("%s\t\t%s\t\t%s\t\t%s\n",p1->name,p1->number,p1->home,p1->email);} return; fclose(fp); }
时间: 2024-01-23 22:02:37 浏览: 74
HarmonyOS应用开发在线体验-lianxiren.docx
这份代码实现了从文件中读取联系人信息并将其存入链表中的功能。首先通过 fopen() 函数打开一个名为“通讯录保存位置.dat”的文件,如果文件打开失败则输出提示信息并退出。然后通过 fread() 函数逐个读取文件中存储的联系人信息,每读取一个联系人信息就动态分配一个节点来存储,并将其添加到链表中。需要注意的是,这里读取的数据是二进制数据,因此需要指定读取数据的长度。最后在返回链表头节点之前,需要释放最后一个动态分配的节点的内存。
另外,代码中还有一个函数名为 duqu_list(),用于从文本文件中读取联系人信息并输出到控制台。该函数与 load_list() 函数不同之处在于,它使用 fscanf() 函数逐行读取文本文件中的联系人信息,并将其输出到控制台。需要注意的是,这里读取的数据是文本数据,因此可以直接使用 fscanf() 函数进行读取。读取数据的方式是通过指定读取的格式字符串,将每个字段的值读取到对应的变量中。最后在读取完毕后需要关闭文件。
阅读全文