这个操作系统的存储管理的c程序在linux系统下报错了,想问问怎么改


#include "stdio.h"
struct gdf   /*固定分区结构体*/
{char num[2];     /*区号*/
 char size[4];   /*大小*/
 char begin[4];   /*起址*/
 char flag[2];
 struct gdf *next; /*后指针*/
 struct gdf *prior;/*前指针*/
 }stu;
struct gdf *fir;   /*分区链表的头指针*/
struct gdf *back;  /*分区链表的尾指针*/
void enter( ),turn(),prin( );
char str[16][4]={"1","16","20","1","2","32","36","1","3","64","68","1","4","124","132","0"};

main( )
{
 fir=back=NULL; /*对分区链表的头尾指针赋初值*/
 enter();     /*对分区链表赋初值*/
 for(;;)
   {switch(menu( )){
            case 1 : inputs();  break; /*输入作业大小并处理*/
            case 2 : turn();    break; /*改变分配状态*/
            case 3 : prin( );   break; /*显示*/
            case 4 : exit(0);          /*退出*/
           }
   }
}

/*主菜单*/
menu( )
{
char ch[2];
int n;
printf("\n\t固定分区操作,请选择功能:\n");
printf("\t1.输入作业的大小\n");
printf("\t2.改变分区的分配状态\n");
printf("\t3.显示分区链表内容\n");
printf("\t4.退出\n");
do{
   printf("\t请按数字选择:");
   gets(ch);
   n=atoi(ch);
   }while(n<0 || n>4);
return(n);
}

void enter()
{
int qq;
struct gdf *inf,*bc();
for(qq=0;qq<4;qq++)     /*结点初始化*/
  {inf=(struct gdf *)malloc(sizeof(stu)); /*开辟新结点空间*/
   if(!inf){
   printf("\tuse up!\n");
   return;
   }
strcpy(inf->num,str[qq*4]);
strcpy(inf->size,str[qq*4+1]);
strcpy(inf->begin,str[qq*4+2]);
strcpy(inf->flag,str[qq*4+3]);
fir=bc(inf,fir);
}
}

inputs()
{
char q[5];
struct gdf *inf;
inf=fir;
while(inf)                   /*寻找空闲分区*/
{if(atoi(inf->flag)==0)
   break;
 inf=inf->next;
}                           /*不存在空闲分区,返回*/
if(!inf)
  {printf("\t暂时没有空闲分区.\n");
  return;}
printf("\t输入作业大小(K):"); /*打印提示信息*/
gets(q);
inf=fir;
while(inf)                   /*寻找符合条件的空闲分区,找到则返回*/
{if((atoi(q)<atoi(inf->size)) && atoi(inf->flag)==0)
  {strcpy(inf->flag,"1");
   printf("\t作业已分配在%s区.\n",inf->num);
   return;
   }
inf=inf->next;
}
printf("\t空闲分区不够大,请选择另一个较小的作业.\n");
}

void turn()
{
char q[5],q1[5];
struct gdf *inf;
printf("\t输入分区(1-4):"); /*打印提示信息*/
gets(q);
printf("\t输入分配状态(0-1):");
gets(q1);
inf=fir;
while(inf)
{
if(atoi(inf->num)==atoi(q))   /*寻找符合条件分区*/
  {strcpy(inf->flag,q1);      /*改变分区状态*/
   printf("\t%s分区已成功改变分区状态.\n",inf->num);
   return;
   }
inf=inf->next;
}
printf("\t该分区不存在.\n");
return;
}

void prin( )     /*显示*/
{
struct gdf *j;
j=fir;
printf("\t区号   ");
printf("\t大小   ");
printf("\t起址   ");
printf("\t标志\n");
while(j){     /*显示固定分区的信息*/
printf("\t%s      ",j->num);
printf("\t%s   ",j->size);
printf("\t%s   ",j->begin);
printf("\t%s   ",j->flag);
printf("\n");
j=j->next;
}
}

struct gdf *bc(i,st)
struct gdf *i;
struct gdf *st;
{
  struct gdf *k;
  if(back==NULL) {
  i->next=NULL;
  i->prior=NULL;
  back=i;
  return(i);
}
 k=back;
 k->next=i;
 i->next=NULL;
 i->prior=k;
 back=i;
 return(st);
}

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,已经为您补发到账户,我们后续会持续优化,扩大我们的服务范围,为您带来更好地服务。

img