运用C语言如何删除文件中的某条数据

求大神!!学生管理系统的删除功能,如何实现。我这函数怎么不能删除之前录入的学生数据呢头文件和全局变量:#include<stdio.h>#include<stdlib.h... 求大神!!
学生管理系统的删除功能,如何实现。
我这函数怎么不能删除之前录入的学生数据呢

头文件和全局变量:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
struct student
{
char num[20];
char name[20];
char shuxue[20];
char yingyu[20];
char wuli[20];
char jisuanji[20];
};
FILE *fp;
struct student stu[10000],stu2[10];
char wenjianming[20];
int i,k,flag2=0,c=0,m=0,n=0,x=0;
int j=0;//学生个数!
int b=0;//追加学生个数!!
int s=0;//删除学生个数!!
int sum=0;//总的学生个数!!
int flag=0;
函数:
nt shanchu()
{
sum=n+m-s;
if(sum==0)
{
printf("您得先录入,再删除~!笨!~\n");

getchar();
return 0;

}
char xuehao[20];
printf("请输入你要打开的文件名");
scanf("%s",&wenjianming);
if((fp=fopen(wenjianming,"rb+"))==NULL)
{
puts("the file can't be opened");
c++;
return 1;
}

printf("请输入要删除的人的学号:");

scanf("%s",xuehao);

for(i=0;i<sum;i++)
{
if(strcmp(stu[i].num,xuehao)==0)
{
printf("%s %s %s %s %s %s\n",stu[i].num,stu[i].name,stu[i].shuxue,stu[i].yingyu,stu[i].wuli,stu[i].jisuanji);

for(k=i;k<sum-1;k++)
{

strcpy(stu[k].num,stu[k+1].num );
strcpy(stu[k].name ,stu[k+1].name );

strcpy(stu[k].shuxue ,stu[k+1].shuxue );
strcpy(stu[k].wuli,stu[k+1].wuli );

strcpy(stu[k].yingyu,stu[k+1].yingyu );
strcpy(stu[k].jisuanji,stu[k+1].jisuanji );

}
break;
}

}
fclose(fp);
s++;

printf("删除后的数据:\n");

for(i=0;i<sum-s;i++)
{

printf("%s %s %s %s %s %s\n",stu[i].num,stu[i].name,stu[i].shuxue,stu[i].yingyu,stu[i].wuli,stu[i].jisuanji);
fprintf(fp,"%s %s %s %s %s %s\n",stu[i].num,stu[i].name,stu[i].shuxue,stu[i].yingyu,stu[i].wuli,stu[i].jisuanji);
}

fclose(fp);
printf("删除成功!\n");
return 0;
展开
 我来答
du瓶邪
推荐于2016-02-20 · TA获得超过2.4万个赞
知道大有可为答主
回答量:1.7万
采纳率:100%
帮助的人:2952万
展开全部
比如
#include <stdio.h>
#include <stdlib.h>

int main()
{
FILE *fp;
char *insert = "EE,EE,EE,", tmp[256]={0};
int pos, i;

/*test.txt文件内容:01,00,00,00,0E,00,00,00,00,00,00,E1,E2,00,00,00,00*/
fp = fopen("test.txt", "r+");

/*1、等长覆盖*/
fseek(fp, 12, 1);
fprintf(fp, "0F"); /*直接写入等长度的数据就可以完成覆盖*/

/*2、E2后插入“EE,EE,EE,” */
fseek(fp, 25, 1);
pos = ftell(fp); /*插入位置*/
fgets(tmp, 256, fp); /*把后面的数据缓存*/
fseek(fp, pos, 0); /*移动到插入位置*/
fprintf(fp, insert); /*插入,就是写入数据*/
fprintf(fp, tmp); /*把原来的数据再写回来, 完成*/

/*3、01读取后++两次,并重新写回文件*/
rewind(fp);
fscanf(fp, "%x", &i); /*读取数据*/
i = i+2; /* +2 */
fseek(fp, -2, 1); /*调整指针*/
fprintf(fp, "%02x", i); /*写文件*/

fclose(fp);
system("PAUSE");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sunnyhouyq
推荐于2016-11-30 · TA获得超过648个赞
知道小有建树答主
回答量:515
采纳率:100%
帮助的人:521万
展开全部

你在fprintf之前已经关闭文件了,应该用写模式打开文件。

fp = fopen( wenjianming, "wb+" )
追问
这样就可以了?
追答
最后一个for循环前面那个fclose(fp)什么意思。
还要他们说的
scanf("%s",wenjianming);
改了先试试看吧
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hhanw
2013-12-10 · TA获得超过193个赞
知道小有建树答主
回答量:239
采纳率:0%
帮助的人:202万
展开全部
这句话明显错误:scanf("%s",&wenjianming);

wenjianming变量本身就是地址,不需要取地址的。
追问
那要怎么改呀,把&去掉就可以了?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xxzjwxj
2013-12-10
知道答主
回答量:14
采纳率:0%
帮助的人:10万
展开全部
私信我把。。。这尼玛这么一坨。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式