这个程序需要在Linux上执行,但是报错,我不知道从何下手
#include <stdio.h>
struct pcb
{char name[3];
char number[3];
char status[2];
struct pcb *next;
struct pcb *prior;
}stu;
struct pcb *fir;
struct pcb *back;
void enter( ),delete( ),prin( );
char str[12][3]={"a","2","0","b","10","0","c","30","0","d","35","0"};
main( )
{
fir=back=NULL;
enter(0);
for(;;)
{switch(menu( )){
case 1 : enter(1); break;
case 2 : delete( ); break;
case 3 : prin( ); break;
case 4 : exit(0);
}
}
}
menu( )
{
char ch[2];
int n;
printf("\t就绪队列操作,请选择功能:\n");
printf("\t1.插入进程的信息\n");
printf("\t2.删除进程的信息\n");
printf("\t3.显示进程链表内容\n");
printf("\t4.退出\n");
do{
printf("\n\t请按数字选择:");
gets(ch);
n=atoi(ch);
}while(n<0 || n>4);
return(n);
}
void enter(int q)
{
int qq;
struct pcb *inf,*bc( );
if(q==1)
{
inf=(struct pcb *)malloc(sizeof(stu));
if(!inf){
printf("\tuse up!\n");
return;
}
inputs("\t请输入进程标识符(最多两位):",inf->name,2);
inputs("\t请输入进程优先数(最多两位):",inf->number,2);
inputs("\t请输入进程当前状态(一位):",inf->status,1);
fir=bc(inf,fir);
}
else
{for(qq=0;qq<4;qq++)
{inf=(struct pcb *)malloc(sizeof(stu));
if(!inf){
printf("\tuse up!\n");
return;
}
strcpy(inf->name,str[qq*3]);
strcpy(inf->number,str[qq*3+1]);
strcpy(inf->status,str[qq*3+2]);
fir=bc(inf,fir);
}
}
}
inputs(sm,s,count)
char *sm,*s;
int count;
{
char q[3];
do{
printf(sm);
gets(q);
if(strlen(q)>count) printf("\t太长了!\n");
}
while(strlen(q)>count);
strcpy(s,q);
}
struct pcb *bc(i,st)
struct pcb *i;
struct pcb *st;
{
struct pcb *j,*k;
if(atoi(i->status)==0)
{
if(back==NULL)
{
i->next=NULL;
i->prior=NULL;
back=i;
return(i);
}
j=st;
while(j)
{if(strcmp(j->name,i->name)==0)
{printf("\n\t该进程已存在就绪队列中。\n\n");
return(st);
}
j=j->next;
}
j=st;
k=NULL;
while(j){
if(atoi(j->number)<atoi(i->number))
{
k=j;
j=j->next;
}
else
{
if(j->prior)
{
j->prior->next=i;
i->next=j;
i->prior=j->prior;
j->prior=i;
return(st);
}
i->next=j;
i->prior=NULL;
j->prior=i;
return(i);
}
}
k->next=i;
i->next=NULL;
i->prior=k;
back=i;
return(st);
}
printf("\n\t该进程不是就绪状态,不能插入就绪队列中。\n\n");
return(st);
}
void delete( )
{
struct pcb *in;
char s[2];
printf("\t请输入进程标识符:");
gets(s);
in=fir;
while(in){
if(strcmp(s,in->name)==0) break;
else in=in->next;
}
if(in==NULL)
printf("\t未找到此进程!\n");
if(in){
if(fir==in)
{
fir=in->next;
if(fir) fir->prior=NULL;
else back=NULL;
}
else{
in->prior->next=in->next;
if(in!=back)
in->next->prior=in->prior;
else back=in->prior;
}
free(in);
}
}
void prin( )
{
struct pcb *j;
j=fir;
while(j){
printf("\t%s ",j->name);
printf("\t%s ",j->number);
printf("\t%s ",j->status);
printf("\n");
j=j->next;
}
}