C语言中读写文件的问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 07:55:02
void fun4()
{ int k;
FILE *fp;
fp=fopen("shixun","r+");
char newname[20];
printf("请输入该学生的名字!\n");
gets(newname);
printf("所有学生记录为:\n");
fun2();
for(k=0;k<2;k++)
if(strcmp(newname,stu[k].name)==0)
{
printf("你选择的学生为:\n");
printf("%ld,%s,%c,%d,%d,%d",stu[k].num,stu[k].name,stu[k].sex);
stu[k].num=stu[k+1].num;
strcpy(stu[k].name,stu[k+1].name);
stu[k].sex=stu[k+1].sex;
}
printf("学生记录删除完毕!");
fclose(fp);
}

着段函数的功能是实现文件读取文件然后删除键盘输入的对应内容,可我怎么也弄不起来,高手帮个忙啊```

其实你这问题我以前做过,你这一段有问题
if(strcmp(newname,stu[k].name)==0)
{
printf("你选择的学生为:\n");
printf("%ld,%s,%c,%d,%d,%d",stu[k].num,stu[k].name,stu[k].sex);
stu[k].num=stu[k+1].num;
strcpy(stu[k].name,stu[k+1].name);
stu[k].sex=stu[k+1].sex;
}
这里你只把k+1的内容复制到了k中,这样就出现了两份的k+1的内容,解决方案就是把k之后的所有数据向前移动1位,但这样却占用大量的时间效率,而且你这个最后也没有输出到文件的过程。
给你个参考意见,就是建立一个一维数组,分别对应着stu,需要删除哪个,就把哪个的stu对应的位标记为1,往文件里输出的时候,遇到被标记的就跳过,这样就减轻了时间效率。