1-27 | 今日完成了要求题目所有功能,然后在菜单和使用体验方面完成写优化。 void xianshi(peo *head) { void mune(peo * head); peo *p,*q; int flag=1; int n=0,m=0; int i,k=0; if(head!=NULL) { for(p=head->next;p!=NULL;p=p->next)//统计数据个数 k++; p=head->next; printf("姓名----------电话----------组群\n"); for(;p!=NULL;) { while(n<10&&p!=NULL) { n++; printf("%-14s",p->name); printf("%-14s",p->tel); printf("%-14s",p->qunzu); printf("\n"); q=p; p=p->next; } printf("\n【主菜单】-0,【下一页】-1,【上一页】-2\n"); fflush(stdin); scanf("%d",&flag); if(flag==0) { system("cls"); mune(head); } if(flag==1) { n=n%10; if(m==(k/10))//若本页已是最后一页,则提示,并再次输出 { system("cls"); printf("已是最后一页\n"); printf("姓名----------电话----------组群\n"); p=q; } else { m++; system("cls"); printf("姓名----------电话----------组群\n"); n=n%10; } } if(flag==2) { p=head->next; n=n%10; if(m==0)//若本页已是第一页,则提示,并再次输出 { system("cls"); printf("已是第一页\n"); printf("姓名----------电话----------组群\n"); } else { m--; system("cls"); printf("姓名----------电话----------组群\n"); for(i=0;i<(m-1)*10;i++)//移动指针 p=p->next; } } } } else printf("通讯录为空\n"); printf("\n任意键进入主菜单\n"); fflush(stdin); scanf("%d",&flag); system("cls"); } | 问题:在完成每页显示10个,然后有上一页下一页选项的时候,循环无法正常退出 改善方法: 最开始 while(n<10) { n++; printf("%-14s",p->name); printf("%-14s",p->tel); printf("%-14s",p->qunzu); printf("\n"); q=p; p=p->next; } 每次结束时,都因为最后一个指针已被赋空而死循环。 后改为while(n<10&&p!=NULL) 小小的一句话却花了好几个小时来找。。 | 今天体验程序,发现显示完通讯录进入主菜单,衔接不好。明天优化。 |