學習編程語言,要學會自己找錯誤。我幫妳修改了壹下,有2個地方有問題。
至於pcb *createprocess(pcb *head);是什麽,其實他就是壹個子程序。
程序名叫createprocess
pcb *表示它的返回值是壹個pcb *類型,也就是結構體指針。
#include<stdio.h>#include<malloc.h>
#define?max?100
#define?pfree?0
#define?running?1
#define?aready?2
#define?blocking?3
typedef?struct?node
{
char?name;
int?status;
int?precendence;
int?ax,bx,cx,dx;
int?pc;
int?psw;
struct?node?*next;
}pcb;
pcb?*createprocess(pcb?*head)
{
pcb?*p,*q;
int?a,b,c,d,m,n;
char?ID;
int?s;
q=NULL;
printf("\ninput?the?first?seven?status?pcb:");
scanf("n%c",&ID);
scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&m,&n);
while(ID!='*')
{
p=(pcb*)malloc(sizeof(pcb));
p->name=ID;
p->ax=a;
p->bx=b;
p->cx=c;
p->dx=d;
p->pc=m;
p->psw=n;
p->precendence=pre;//這裏的pre沒定義,不知道是什麽。我猜想是pfree
p->status=aready;
if(head==NULL)
head=p;
else
q->next=p;
q=p;
printf("\ninput?the?next?pcb:");
scanf("n%c",&ID);
scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&m,&n);//這裏缺少壹個"
}
if(q!=NULL)
q->next=NULL;
q=head;
while(q)
{
printf("\n?peocess?name.status.ax.bx.cx.dx.pc.psw.\n");
printf("%10c%5d%8d%5d%5d%5d%5d%5d%5d",q->name,q->status,q->precendence,q->ax,q->bx,q->cx,q->dx,q->pc,q->psw);
q=q->next;
}
return?head;/*createprocess?end*/
}
void?processfifo(pcb?*head)
{
pcb?*p;
p=head;
printf("\n?the?process?use?fifo?method.\n");
printf("running?the?first?process:\n");
while(p!=NULL)
{
p->status=running;
printf("\nprocess?name?status.ax.bx.cx.dx.pc.psw.");
printf("\n%10c%5d%8d%5d%5d%5d%5d%5d",p->name,p->status,p->bx,p->cx,p->dx,p->pc,p->psw);/*check?process?running?status?*/
p->status=0;
p=p->next;
}
printf("\ncheck?weatherfer?the?process?complete:");
p=head;
while(p)
{
printf("\n%3c%3d",p->name,p->status);
p=p->next;
}
printf("\ngame?is?over!\n");
}
int?main(){
pcb?*head;
head=NULL;
head=createprocess(head);
processfifo(head);
return?0;
}