①请看下面两段代码,区别问题所在:
条件:
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对应代码1结果
图2对应代码2结果
以上出现的问题只供参考,错误难免,谢谢!