C语言,删除结构体学生信息

为什么输入信息后无法显示后面内容?

部分代码如下:

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();
}