问题:程序运行到某一步就结束不执行了

我想要实现出圈游戏的代码,代码如下:

#include
#include

const int max=100;
int a[max],m[max],p[max];

int N(int n)//用于计算n 
{
    int s[n],r[n],p=0,max=1,i=0,j=0;
    for(j=0;j1;
        for(i=0;iif(j!=i) s[j]=s[j]*m[i];
        }
    }
    for(i=0;ifor(i=0;iprintf("%d ",a[i]*s[i]*r[i]);
    }
    p=p%max;
    return p;
}

typedef struct node{
    int data;
    struct node* next;
    int index;
}node;

node*head;

void generate(int n)//循环列表 
{
    node *p;node *q;node *head;
    head =(node*)malloc(sizeof(node));
    head->data=1;head->next=NULL;head->index =1;
    q=head;
    for(int i=2;i<=n;i++)
    {
        node*p=(node*)malloc(sizeof(node));
        p->data=i;p->index=i;
        printf("%d ",p->index );
        q->next=p;p->next=NULL;
    }
    p->next=head;
}//

void get_a(int n)
{
    node *h;node *q;
    q=head;
    int i=0,count=1;
    printf("%d ",n);
    while(q->next !=q)
    {
        count=1;
        while(q->data !=p[i])
            { h=q;q=q->next ;count++;}
        a[i]=count ;
        printf("%d ",count);
        h->next =q->next ;q=h->next ;
        i+=1;
        if(i==3) break;
    }
}
int main()
{
    int n,i,k;//最开始的人数 
    scanf("%d",&n);
    for(i=n;i>1;i--) m[i]=n;//得到了m数组,现在需要找到a数组,输入p数组 
    for(i=0;iscanf("%d",&p[i]);//
    generate(n);//
    printf("%d ",n)//不运行了
    get_a(n);//得到a[]数组 
    k=N(n-1);
    printf("%d",k);
}

代码运行到generate(n)之后,后面的代码就不运行了
我想知道除了什么问题,为什么会不运行了?