想做了一个简单的图书馆系统,准备用动态数组来解决的,发现编译不出来,不知道哪里出了问题。

#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
int n;
void input();
void check();
void deletes();
void revise();
void sort();
void output();
struct adds
{
    char name[50];/*姓名*/
    char address[50];/*家庭地址*/
    int  phone;/*个人电话*/
    int  post;/*家庭邮编*/
    char mail[50];/*家庭e—mail*/
}ads;
void menu()
{
    printf("****进入菜单****\n");
    printf("1. 添加个人信息\n");
    printf("2. 查询个人信息\n");
    printf("3. 删除个人信息\n");
    printf("4. 修改个人信息\n");
    printf("5. 信息排序\n");
    printf("6. 输出全部信息\n");
    printf("0. 退出\n");
    printf("****************\n");
}
int main()
{
    int i;
    struct adds *p;
    scanf("%d",&n);
    p = (struct adds *)malloc (sizeof(struct adds)*n);
    while(1)
    {
    menu();
    printf("please your sel:\n");
    scanf("%d",&i);
    switch(i)
    {
        case 1:input();break;
        case 2:check();break;
        case 3:deletes();break;
        case 4:revise();break;
        case 5:sort();break;
        case 6:output();break;
        case 0:exit(0);break;
    }
    } 
    free(p);
    return 0;

void input(struct adds s[])
{
    int i; 
    for(i=0;i<n;i++)
    {
        printf("输入姓名:\n");
        scanf("%s",s[i].name);
        getchar();
        printf("输入家庭住址:\n");
        scanf("%s",s[i].address);
        getchar();
        printf("输入手机号码:PS:手机号码11位哦,亲\n");
        scanf("%d",&s[i].phone);
        getchar();
        printf("输入邮编:PS:邮编为6位哦\n");
        scanf("%d",&s[i].post);
        getchar();
        printf("输入你的E.mail:PS:记得包含@字符,且@两边都非空哦。\n");
        scanf("%s",s[i].mail); 
        getchar();
     } 
}
void check()
{
    int i;
    printf("请问你想查谁的信息,请告诉我们 她 或者是 他 其中一条信息,我们会帮你锁定 他 或者是 她 my master\n");
    printf("1为姓名,2为家庭住址,3为手机号码,4为邮编,5为email\n");
    scanf("%d",&i);
    switch(i)
    {
        case 1:break; 
        case 2:break; 
        case 3:break; 
        case 4:break; 
        case 5:break; 
            }        
}
void deletes()
{
}
void revise()
{
    
}
void sort()
{
    
}
void output(struct adds s[])
{
    int i;
    for(i=0;i<n;i++)
    {    
        printf("姓名:%s\n家庭地址:%s\n手机号码:%d\n邮编:%d\n它的e-mail:%s",s[i].name,s[i].address,s[i].phone,s[i].post,s[i].mail);
        printf("\n");}
}

#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
int n;
void input();
void check();
void deletes();
void revise();
void sort();
void output();
struct adds
{
    char name[50];/*姓名*/
    char address[50];/*家庭地址*/
    int  phone;/*个人电话*/
    int  post;/*家庭邮编*/
    char mail[50];/*家庭e—mail*/
}ads;
void menu()
{
    printf("****进入菜单****\n");
    printf("1. 添加个人信息\n");
    printf("2. 查询个人信息\n");
    printf("3. 删除个人信息\n");
    printf("4. 修改个人信息\n");
    printf("5. 信息排序\n");
    printf("6. 输出全部信息\n");
    printf("0. 退出\n");
    printf("****************\n");
}

void input(struct adds s[])
{
    int i; 
    for(i=0;i<n;i++)
    {
        printf("输入姓名:\n");
        scanf("%s",s[i].name);
        getchar();
        printf("输入家庭住址:\n");
        scanf("%s",s[i].address);
        getchar();
        printf("输入手机号码:PS:手机号码11位哦,亲\n");
        scanf("%d",&s[i].phone);
        getchar();
        printf("输入邮编:PS:邮编为6位哦\n");
        scanf("%d",&s[i].post);
        getchar();
        printf("输入你的E.mail:PS:记得包含@字符,且@两边都非空哦。\n");
        scanf("%s",s[i].mail); 
        getchar();
     } 
}
void check()
{
    int i;
    printf("请问你想查谁的信息,请告诉我们 她 或者是 他 其中一条信息,我们会帮你锁定 他 或者是 她 my master\n");
    printf("1为姓名,2为家庭住址,3为手机号码,4为邮编,5为email\n");
    scanf("%d",&i);
    switch(i)
    {
        case 1:break; 
        case 2:break; 
        case 3:break; 
        case 4:break; 
        case 5:break; 
            }        
}
void deletes()
{
}
void revise()
{
    
}
void sort()
{
    
}
void output(struct adds s[])
{
    int i;
    for(i=0;i<n;i++)
    {    
        printf("姓名:%s\n家庭地址:%s\n手机号码:%d\n邮编:%d\n它的e-mail:%s",s[i].name,s[i].address,s[i].phone,s[i].post,s[i].mail);
        printf("\n");}
}
int main()
{
    int i;
    struct adds *p;
    scanf("%d",&n);
    p = (struct adds *)malloc (sizeof(struct adds)*n);
    menu();
    while(1)
    {
    
    printf("please your sel:\n");
    scanf("%d",&i);
    switch(i)
    {
        case 1:input(p);break;
        case 2:check();break;
        case 3:deletes();break;
        case 4:revise();break;
        case 5:sort();break;
        case 6:output(p);break;
        case 0:exit(0);break;
    }
    } 
    free(p);
    return 0;

知道程序哪里错吗?C语言是面向过程的