图书管理系统的统计功能

运行后就跳出这个

改几个代码会出现死循环,绝望+10086

这是统计功能的代码。

#include "record.h"
BOOK *stastic(BOOK *top)
{
BOOK *p;

int num=0,cnum=0,znum=0,i;
char str[2];
int cn=0;
char cname[][10]={"北京出版社","上海出版社","青海出版社","武汉出版社","广州出版社","长春出版社"};
char zname[][6]={"韩寒","陈新宏","马健会","郭涛","刘艺","冰心"};
p=top;
for(;; )
{
    if(count==0)
    {
         printf("现在系统还没有书籍信息!\n");
         return(top);
    }   
     printf("请输入统计的方式:\n");
     printf("1.按出版社\n");
     printf("2.按主编\n");

gets(str);

while(1)
    {
        cn = atoi(str);
       if(cn<1|| cn>2 )
       {
           printf("\n输入错误,重选1-2:");
           gets(str);
       }
       else    break;
        }


while(p)
{
    if(cn==1){
            num++;
            for(i=0;i<7;i++){
                if(strcmp(p->Publisher,cname[i]))
                    cnum++;
                    p=p->next;
            }               
            printf("系统共有");
            printf("%d",num);
            printf("本书。\n");
            printf("%c",p->Publisher);
            printf("共出版");
            printf("%d",cnum);
            printf("本书。");
            }

/* capart[10]; //用于统计的数组

p=head;
while(p!=NULL){
for(i=0;i //在现有数组节点中能找到,则数量+1
}
//如果找不到,数组节点增+1,数量=1
p=p->next;
}
*/
else
{
num++;
for(i=0;i {
if(strcmp(p->Editor,zname[i]))
znum++;
p=p->next;

}
printf("系统共有");
printf("%d",num);
printf("本书。\n");
printf("%c",p->Editor);
printf("共主编");
printf("%d",znum);
printf("本书。");
}
break;
}
return top;
}}

麻烦各位大神了!!

http://www.docin.com/p-421258976.html