```c
int deletestu(int flag)
{
system("cls");
FILE* fp = fopen("stusys.txt","r"); //打开stusys文本文件
if(fp == NULL)
{
tip(); //是否主动退出
return -1;
}
stulist* stl = (stulist*)malloc(sizeof(stulist)); //为stl开辟空间
if(stl == NULL)
{
fclose(fp);
tip(); //是否主动退出
return -1;
}
stl->next = NULL;
stulist* head = stl;
int frist = 0;
while(fscanf(fp,"%d%s%d%s%f", &stl->stu_num, stl->name, &stl->age, stl->class, &stl->grade) != EOF) //迭代读取文件内容直至文件
{
if (frist == 1)
{
head->next = stl; //为什么要有这个,head指针的内容不是会随着stl指针更新而更新吗?希望有大佬看到解释一下
}
frist++;
stl = stl->next;
if(stl == NULL)
{
stl = (stulist*)malloc(sizeof(stulist));
if(stl == NULL)
{
fclose(fp);
tip(); //是否主动退出
return -1;
}
stl->next = NULL;
}
}
stl =NULL;
fclose(fp);
fp = fopen("stusys.txt","w"); //打开stusys文本文件
if(fp == NULL)
{
tip(); //是否主动退出
return -1;
}
int flagend = 0;
stl = head; //将学生信息链表的头节点传递给stl指针
while(stl != NULL) //遍历链表,将除要删除的学生信息之外的其他学生信息重新写入
{
if(stl->stu_num == flag)
{
printf("\t\t\t学号\t\t姓名\t\t年龄\t\t班级\t\t成绩\n"); //打印要删除学生的信息
printf("\t\t\t%-16d%-16s%-16d%-16s%-16f\n", stl->stu_num, stl->name, stl->age, stl->class, stl->grade);
stl = stl->next;
flagend++;
continue;
}
fprintf(fp, "%d %s %d %s %f\n", stl->stu_num, stl->name, stl->age, stl->class, stl->grade);
stl = stl->next;
}
if(flagend)
{
end("信息已删除");
}
else if(flagend == 0)
{
end("系统内无该学生信息");
}
free(stl);
fclose(fp);
return 0;
}
```