求大佬帮解决这个c语言问题,为什么这个程序一运行到scanf就会崩溃
#include<stdio.h>
#define max 100
#define pfree 0 /*进程结束*/
#define running 1 /*运行状态*/
#define aready 2 /*就绪状态*/
#define blocking 3 /*阻塞状态*/
typedef struct node
{
char name; //进程名
int status; //状态
int Arrive_Time; //到达时间
int Serve_Time; //服务时间
int Finish_Time; //完成时间
int priority; //优先级
struct node *next; /*pcb define*/
}PCB;
PCB array[max];
PCB *createprocess(PCB *head)
{ //输入进程创建就绪队列
int num,i;
printf("请输入进程的数量:\n");
scanf("%d",&num);
if(num>100){
printf("进程数超出,系统崩溃!\n");
}
//head指向第一个进程
head=array;
for( i=0;i<num;i++){
array[i].next=&array[i+1];
array[i].status=aready;
array[i].Finish_Time=0;
array[i].priority=0;
}
for(i=0;i<num;i++){//进程初始化
scanf("%s %d %d",&array[i].name,&array[i].Arrive_Time,&array[i].Serve_Time);//为什么这里就出问题了啊啊啊啊啊啊
printf("%s %d %d\n",array[i].name,array[i].Arrive_Time,array[i].Serve_Time);
}
array[num-1].next=NULL;
return head;
}
void processfifo(PCB *head) /*use fifo */
{ //①按照fifo算法对就绪队列进程实施调度(基本要求)
//②并计算各进程的周转时间(选做)
PCB *p;
p=head;
int time=0;//表示系统时间
for(;p!=NULL;p=p->next){//计算各个进程的完成时间
p->Finish_Time=p->Serve_Time+time;
time=p->Finish_Time ;
}
printf("进程 到达时间 服务时间 开始时间 完成时间 周转时间 带权周转时间");
p=head;
for(;p!=NULL;p=p->next){
printf("%2c %4d %4d %4d %4d %4d %6.2f",p->name,p->Arrive_Time,p->Serve_Time,p->Finish_Time-p->Serve_Time,p->Finish_Time,p->Finish_Time-p->Arrive_Time,(p->Finish_Time-p->Arrive_Time)/p->Serve_Time);
}
}
main()
{
PCB *head;
head=NULL;
head=createprocess(head);
processfifo(head);
}