为什么数据可以查看到但是没有保存下来?求!

void sd(struct library lib[])
{
    FILE *fp;
    char xsm[10],ch;
    int i;
    printf("建立书单\n");
    printf("请输入书名\n");
    scanf("%s",&xsm); 
    fp=fopen("C:\\Users\\Public\\Documents\\书单.txt","w");
    fprintf(fp,"|编号|书名|作者|类别编号|价格|\n");    
    for(i=0;i<n;i++)
    {
        if(strcmp(xsm,lib[i].sm)==0)
        {
            getchar();
            printf ("找到该书籍,如下所示;\n");
            HH;
            ll(lib,i);
            printf("是否保存到书单(y/n)?\n");
            scanf("%c",&ch);
            if(ch=='y')
            {
                fprintf(fp,"|%-10d|%-10s|%-10s|%-10s|%-10f|\n",lib[i].bh,lib[i].sm,lib[i].zz,lib[i].lx,lib[i].jg);    
            }
            printf("已保存到书单\n"); 
            return 1; 
        }
        
    }
     printf("没有找到这本书!\n");
}


getchar();