丿锋 2021-12-07 10:59 采纳率: 33.3%
浏览 26
已结题

求看看这个进程调度程序有什么问题

这个程序需要在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;
}
}


  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-12-07 11:01
    关注

    报啥错啊

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月15日
  • 已采纳回答 12月7日
  • 创建了问题 12月7日

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)