解释代码void print_list(lianxiren*head) { void caidan(); int n=0; printf("现在通讯录中有如下成员:"); while(head!=NULL) { printf("\n名字:");puts(head->name); printf("\n电话号码:");puts(head->number); printf("\n住址:");puts(head->home); printf("\n邮编:");puts(head->email); putchar('\n'); head=head->next;n++; if(n%8==0){ printf("按回车键显示下一页"); getchar(); system("cls"); caidan(); } } printf("总共%d个联系人\n",n); }
时间: 2024-01-15 13:03:02 浏览: 146
这段代码定义了一个函数 `print_list`,该函数的参数为一个叫做 `head` 的指向 `lianxiren` 结构体的指针。函数的功能是遍历链表并打印出每个联系人的信息,包括名字、电话号码、住址和邮编。在每次打印完一个联系人的信息后,会将指针 `head` 指向下一个联系人,直到遍历完整个链表。同时,每打印8个联系人的信息,函数会提示用户按回车键显示下一页,并清空屏幕并打印一个名为 `caidan` 的菜单函数,以便用户选择下一步操作。最后,函数会输出链表中联系人的总数。
相关问题
解释代码void save_list(lianxiren*head) {FILE *fp; if((fp=fopen("通讯录保存位置.dat","w+"))==NULL) { printf("File cannot be opened\n"); exit(0);} if(head==NULL) { printf("通讯录为空\n"); return; } lianxiren*p1=head; while(p1!=NULL) { if(fwrite(p1,LEN,1,fp)!=1){ printf("cannot open file\n"); return;} p1=p1->next; } printf("保存完毕!\n"); fclose(fp); }
这段代码实现了将通讯录数据保存到文件中的功能。具体实现过程如下:
1. 打开一个名为“通讯录保存位置.dat”的文件,如果打开失败则输出错误信息并结束程序。
2. 判断链表头是否为空,如果为空则输出“通讯录为空”并直接返回。
3. 定义一个指针p1,将其初始化为链表头。
4. 使用while循环遍历整个链表,每次将p1指向的结构体数据(即一个联系人的信息)写入文件中,写入时使用fwrite函数,其中LEN表示每个结构体的长度,1表示写入1个结构体数据,fp表示文件指针。如果写入失败则输出错误信息并直接返回。
5. 写入完成后输出“保存完毕!”的信息。
6. 关闭文件指针fp。
解释代码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); }
这份代码实现了从文件中读取联系人信息并将其存入链表中的功能。首先通过 fopen() 函数打开一个名为“通讯录保存位置.dat”的文件,如果文件打开失败则输出提示信息并退出。然后通过 fread() 函数逐个读取文件中存储的联系人信息,每读取一个联系人信息就动态分配一个节点来存储,并将其添加到链表中。需要注意的是,这里读取的数据是二进制数据,因此需要指定读取数据的长度。最后在返回链表头节点之前,需要释放最后一个动态分配的节点的内存。
另外,代码中还有一个函数名为 duqu_list(),用于从文本文件中读取联系人信息并输出到控制台。该函数与 load_list() 函数不同之处在于,它使用 fscanf() 函数逐行读取文本文件中的联系人信息,并将其输出到控制台。需要注意的是,这里读取的数据是文本数据,因此可以直接使用 fscanf() 函数进行读取。读取数据的方式是通过指定读取的格式字符串,将每个字段的值读取到对应的变量中。最后在读取完毕后需要关闭文件。
阅读全文