C语言,怎将文件中指定位置上的数据更新后覆盖???求代码。。。
自己写的有问题,如下。测试一组数据正确,多加一组就运行不正确。如果可以,尽量在我的基础上改下。也可以粘贴一下你们自己写的。文件学的太浅,不太懂。。。代码如下:voidfu...
自己写的有问题,如下。测试一组数据正确,多加一组就运行不正确。如果可以,尽量在我的基础上改下。也可以粘贴一下你们自己写的。文件学的太浅,不太懂。。。代码如下:void fun(student *stu,char *f_name,int id){ int i = 0;int j = 0; FILE *fp; fp = fopen(f_name,"w+"); for(i = 0;i<N;i++) { fscanf(fp,"%d %s %f %f %f",&stu->id,stu->name,&stu->grade1,&stu->grade2,&stu->grade3); if((stu->id) == id) { (stu->grade1) = (stu->grade1)+3.0; (stu->grade2) = (stu->grade2)+3.0; (stu->grade3) = (stu->grade3)+3.0;//下列fprintf函数,感觉这里这么写不对,该怎么样写?????? fprintf(fp,"%d %s %f %f %f\n",stu->id,stu->name,stu->grade1,stu->grade2,stu->grade3); } } fclose(fp);}
上边的格式有问题。。。看这个吧。。。
void fun(student *stu,char *f_name,int id)
{
int i = 0;int j = 0;
FILE *fp;
fp = fopen(f_name,"w+");
for(i = 0;i<N;i++)
{
fscanf(fp,"%d %s %f %f %f",&stu->id,stu->name,&stu->grade1,&stu->grade2,&stu->grade3);
if((stu->id) == id)
{
(stu->grade1) = (stu->grade1)+3.0;
(stu->grade2) = (stu->grade2)+3.0;
(stu->grade3) = (stu->grade3)+3.0;
//下列fprintf函数,感觉这里这么写不对,该怎么样写??????
fprintf(fp,"%d %s %f %f %f\n",stu->id,stu->name,stu->grade1,stu->grade2,stu->grade3);
}
}
fclose(fp);
} 展开
上边的格式有问题。。。看这个吧。。。
void fun(student *stu,char *f_name,int id)
{
int i = 0;int j = 0;
FILE *fp;
fp = fopen(f_name,"w+");
for(i = 0;i<N;i++)
{
fscanf(fp,"%d %s %f %f %f",&stu->id,stu->name,&stu->grade1,&stu->grade2,&stu->grade3);
if((stu->id) == id)
{
(stu->grade1) = (stu->grade1)+3.0;
(stu->grade2) = (stu->grade2)+3.0;
(stu->grade3) = (stu->grade3)+3.0;
//下列fprintf函数,感觉这里这么写不对,该怎么样写??????
fprintf(fp,"%d %s %f %f %f\n",stu->id,stu->name,stu->grade1,stu->grade2,stu->grade3);
}
}
fclose(fp);
} 展开
3个回答
展开全部
你这里的student是结构体吧,这里使用open打开文件:
void fun(student *stu,char *f_name,int id)
{
int i = 0;int j = 0;
int fd;
fd = open(f_name, O_RDWR);
for(i = 0;i<N ;i++)
{
read(fd, stu, sizeof(student));
if((stu->id) == id)
{
(stu->grade1) = (stu->grade1)+3.0;
(stu->grade2) = (stu->grade2)+3.0;
(stu->grade3) = (stu->grade3)+3.0;
//下列fprintf函数,感觉这里这么写不对,该怎么样写??????
lseek(fd, -sizeof(student), SEEK_CUR);
write(fd, stu, sizeof(student));
}
}
close(fd);
}
方法就是:使用read每次读取一个student结构体,判断id是否相等,如果相等则重新赋值,文件偏移量后退sizeof(student)大小,写入新结构体即可。
read读文件时,文件偏移是随时更新的,所以要从当前位置后退一个结构体大小。
lseek的用法:
off_t lseek(int handle, off_t offset, int fromwhere);
handel:文件描述符,open的返回值
offset:偏移大小,正数向后偏移,负数向前偏移
fromwhere:偏移的起始点,系统变量:SEEK_CUR(当前)、SEEK_SET(文件头)、SEEK_END(文件尾)
当然用fseek也可以,这里我就不写了,对应的是:
fopen、fread、fwrite、fseek
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-01-13
展开全部
我只是做任务
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
更新后覆盖???
是修改吗?
你可以查一下调整文件内部指针的函数,然后调用相关文件函数往里面覆盖
是修改吗?
你可以查一下调整文件内部指针的函数,然后调用相关文件函数往里面覆盖
追问
是的,就是修改。举个例子,就是通过id找到这个student,将这个student的信息修改了,就OK了。帮忙啊,现在是头都大了。文件学的不是很懂,就会几个基本的函数
追答
你百度“文件内部指针函数”就会找到好多,我就不详细说了,像上面说的lseek也都是里面的一种
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询