错误示例

错误示例

①请看下面两段代码,区别问题所在:
条件:
struct  jcb {
    
char j_name[10];
    
double j_hand;
    
double j_need_time;
    
int j_resources;
    
char j_state;
    
struct jcb *j_pnext;
}
* ready = NULL, * pjcb;
typedef 
struct  jcb JCB;

代码一:
         int  i = 0 ;
    JCB 
* p;
    printf(
" 请输入你要测试的作业数 : " );
    scanf(
" %d " , & NUM);

        p
= GETJCB(JCB);
    printf(
" 请输入要测试的作业的名字(不超过10个字符) : " );
    scanf(
" %s " , & p -> j_name);
    printf(
" 请输入服务时间 : " );
    scanf(
" %d " , & p -> j_need_time);
        
    p
-> j_resources = RESOURCES;
    p
-> j_state = ' R ' ;
    ready
= p;
    p
-> j_pnext = NULL;
        
        
if (ready != NULL)
    
for (;i < NUM - 1 ;i ++ )
    
{
        p
=GETJCB(JCB);
        printf(
"请输入要测试的作业的名字(不超过10个字符) :");
        scanf(
"%s",&p->j_name);
        printf(
"请输入服务时间 :");
        scanf(
"%d",&p->j_need_time);
        
        p
->j_resources=RESOURCES;
        p
->j_pnext=NULL;
    }

代码二:
    int  i = 0 ;
    JCB 
* p;
    printf(
" 请输入你要测试的作业数 : " );
    scanf(
" %d " , & NUM);

    pjcb
= GETJCB(JCB);
    printf(
" 请输入要测试的作业的名字(不超过10个字符) : " );
    scanf(
" %s " , & pjcb -> j_name);
    printf(
" 请输入服务时间 : " );
    scanf(
" %d " , & pjcb -> j_need_time);
        
    pjcb
-> j_resources = RESOURCES;
    pjcb
-> j_state = ' R ' ;
    ready
= pjcb;
    pjcb
-> j_pnext = NULL;
        
   
if (ready != NULL)
    
for (;i < NUM - 1 ;i ++ )
    
{
        p
=GETJCB(JCB);
        printf(
"请输入要测试的作业的名字(不超过10个字符) :");
        scanf(
"%s",&p->j_name);
        printf(
"请输入服务时间 :");
        scanf(
"%d",&p->j_need_time);
        
        p
->j_resources=RESOURCES;
        p
->j_pnext=NULL;
        
        pjcb
->j_pnext=p;
        pjcb
=pjcb->j_pnext;
    }

如果你拿下面的代码来测试上面两段的话可以发现问题:
         while (ready != NULL)
    
{
        printf(
"%s\n",ready);
        ready
=ready->j_pnext;
    }

问题的所在就是代码一只是把作业的内容填充到内存,但并没有把结构的j_pnext把各个单元串起来,所以当测试的时候只能显示第一个,不能显示第二个,因为
ready->j_pnext指针发现不了下一个单元格的开始位置。
而代码而就已经把各个单元的顺序都串起来了。
请看图:
错误示例_第1张图片 错误示例_第2张图片
                图1                                         图2               
图1对应代码1结果
图2对应代码2结果

以上出现的问题只供参考,错误难免,谢谢!

你可能感兴趣的:(错误示例)