第46-61行
if(n==count)
cout<<"查无此人\n";
else if(n==0){
for(n;n<count;n++){
a[n]=a[n+1];
count--;
}
show(a);
}
else{
for(;n<count;n++){
a[n]=a[n+1];
count--;
}
show(a);
}
这一段可以发现两个问题:一是else if(n==0)后的代码块和else后的代码块是重复的,可以把他们放在一起,如下
if(n==count)
cout<<"查无此人\n";
else{
for(;n<count;n++){
a[n]=a[n+1];
count--;
}
show(a);
}
二是count--是在for循环里面的,count是学生系统里的学生人数,在删除一位学生之后应该自减1,但若放在for循环里则会发生多次自减导致count比预想的更少。用删除张三为例,张三是第一个学生,故下标为0,进入该代码块之前n==0,count==3;进入else语句块后a[1]移至a[0]的位置,count--,n++,此时count==2,n==1,n<count判定通过,进入下一次循环;a[2]移至a[1]的位置,count--,n++,此时count==1,n==2,n<count判定不通过,结束for循环。可以发现count进行了两次自减,导致学生系统中的人数只剩下了一位,故此发生了错误。可以把count--放置循环外来解决,如下
if(n==count)
cout<<"查无此人\n";
else{
for(;n<count;n++)
a[n]=a[n+1];
count--;
show(a);
}
目前你的系统还比较简单,可以考虑加一个循环来达到多次添加、删除学生的效果。