为什么输入信息后无法显示后面内容?
部分代码如下:
void deleteOld(){//删除学生信息
int i,j;
char *x;
printf("Please input the id or name:\n");
scanf("%s", &x);
for (i = 0; i < NUM; i++)
{
if ((strcmp(stu[i].id , x))==0)
{
for( j=0;j<NUM;j++){
stu[j]=stu[j+1];}
printf("删除成功!\n");
}
else if ((strcmp(stu[i].name , x))==0)
{
for( j=0;j<NUM;j++){
stu[j]=stu[j+1];}
printf("删除成功!\n");
}
else
printf("删除失败!\n");
}
getch();
}
void deleteOldby(){//删除学生信息
int i,j;
char x[20];//char *x; *x只是指针,没有分配内存
printf("Please input the id or name:\n");
scanf("%s", &x);
for (i = 0; i < NUM; i++)
{
if ((strcmp(stu[i].id , x))==0)
{ //找到该信息,索引为i
for(j=i;j<NUM;j++){ //for( j=0;j<NUM;j++){ 从i开始把后面的往前挪
stu[j]=stu[j+1];}
printf("删除成功!\n");
break; //删除成功,跳出循环 以上修改下同
}
else if((strcmp(stu[i].name , x))==0)
{
for( j=i;j<NUM;j++){
stu[j]=stu[j+1];}
printf("删除成功!\n");
break;
}
}
if(i==NUM) printf("删除失败!\n");//删除成功,跳出循环时i<NUM的,只有数组被全部遍历一次的时候,i才会=NUM
getch();
}
第二个for 循环给你改了一下
注意第一个for循环,我也给你改了一下(如果学生有重名的话,这是必要的)
删除就是把要删除后面的元素前移一位
修改如下,供参考:
void deleteOld(){//删除学生信息
int i,j,flg=0;
char x[32];
printf("Please input the id or name:\n");
scanf("%s", x);
for (i = 0; i < NUM; i++)
{
if ((strcmp(stu[i].id , x))==0 || (strcmp(stu[i].name , x))==0)
{
for( j=i;j<NUM-1;j++) stu[j]=stu[j+1];
NUM--; flg=1;
printf("删除成功!\n");
break;
}
}
if(flg==0) printf("未找到记录!\n");
getch();
}