C语言子函数中fopen文件后必须要fclose吗

首先说明fp不是外部变量,我是在做一个学生通讯录,运用到子函数Open()打开文件,但是为什么这个子函数里用完fopen()后要fclose()一下?不是应该等所有操作,... 首先说明 fp不是外部变量,我是在做一个学生通讯录,运用到子函数Open()打开文件,但是为什么这个子函数里用完fopen()后要fclose()一下?不是应该等所有操作,比如添加学生信息等操作完成保存时再关闭文件吗?
谢谢所有回答和要回答的人,因为只能给一个满意,所以我认真考虑了下,给了一个我认为偏向我问题的人,lzdidiv你的回答也很棒!
展开
 我来答
宛丘山人
推荐于2017-09-30 · 长期从事大学高等数学和计算机数据结构教学
宛丘山人
采纳数:6405 获赞数:24678

向TA提问 私信TA
展开全部
  是的,在使用完一个文件后应该关闭它,这应该成为一个习惯。如果不关闭文件,可能会丢失数据。因为在向文件写数据时,实现将数据输到缓冲区,待缓冲区充满后才正式输出给文件,如果当数据未充满缓冲区而程序结束运行,就会将缓冲区中的数据丢失。用fclose函数关闭文件,他先将缓冲区中的数据输出到磁盘文件然后才释放文件指针变量,从而避免了数据丢失。
  关闭文件的格式是:
  fclose(文件指针);
金色潜鸟
2012-05-31 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5527万
展开全部
fopen文件后不一定要fclose,是否fclose按自己需要。
例如,你先用读的方法打开,看里面有多少个记录。关闭文件,接下来动态分配数组,用来存放这些数据。再打开文件,把数据读入动态数组。再关闭文件。再按添加的方法打开,添加新纪录。再关闭文件。
上面,查看数据个数,动态分配,再读数据,期间可以不关闭文件,而用 rewind(fp), 把文件指针放回开始。
上面,读,添加写,也可以不关闭文件,但在第一次打开时,你要按可读可写可添加方式打开,
读写期间文件指针移动要自己有目的地控制,技术要求高。
开一次,做单一操作,关一次,不容易出错。
追问
那你看完记录后关闭了文件,岂不是将这个文件信息关闭了?不是没有什么用吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
永兵8023
推荐于2017-10-03 · TA获得超过310个赞
知道小有建树答主
回答量:249
采纳率:100%
帮助的人:210万
展开全部
你的同一个子函数中是不是同时包含fopen()和加学生信息等操作呢?如果是的话那么添加学生信息等操作完成保存时再关闭,如果不是,那么必须关闭,然后再另一子函数需要时再重新打开文件,也就是说在一个子函数中必须包含fopen()和fclose()两个命令。亲,看能帮到你吗?
更多追问追答
追问
但是这个子函数【设为open()即A】只进行了文件的读取用的feof功能,真正录入数据或者删除等操作在其他子函数【设为work()即B】,若要将B中数据写入到A所打开的文件中岂不是不行,因为在A中已经fclose?

不是啊,open()中没有写入数据操作,我试着不写fclose程序运行也没问题!还有如果不写会造成什么结果呢?
追答
不写也可以,不过有时会造成文件信息的丢失,为了保险起见,每个子函数中最好加上fclose()将文件关闭。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lzdidiv
2012-05-31 · TA获得超过1951个赞
知道大有可为答主
回答量:1949
采纳率:33%
帮助的人:1280万
展开全部
为了安全起见,最好是写完一次操作就fclose,而且这种操作在fclose前是保存在缓冲区中,当fclose后才会输入到硬盘里,如果中途出了差错,就会丢失操作。
更多追问追答
追问
但是这个子函数【设为open()即A】只进行了文件的读取用的feof功能,真正录入数据或者删除等操作在其他子函数【设为work()即B】,若要将B中数据写入到A所打开的文件中岂不是不行,因为在A中已经fclose?
追答
如果不fclose的话,文件会被占用,其它地方就无法再修改它
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友901dce6
2012-05-31 · 超过11用户采纳过TA的回答
知道答主
回答量:90
采纳率:0%
帮助的人:29.4万
展开全部
如果子函数中用完fopen()后不调用fclose()的话,估计你在子函数中的输出就会有问题,或者说会丢失数据。你试试看(先屏蔽了这个fclose运行看结果),如果是这样的话回复我告诉你原因。
其实刚刚看到一楼已经说出了本质了。只是不知道你的程序到底是怎样的结构。
更多追问追答
追问
输出等都没有问题,我是对这个文件只进行一个流操作
追答
是不是说在子函数中不调用fclose()是不会影响最终的结果的的?如果是,哪你的问题中“但是为什么这个子函数里用完fopen()后要fclose()一下?”矛盾了,这说明在此子函数中不调用也行的。这只是看你在此处对打开的文件有没有进行相关数据的操作,有没有在此确保数据的完整输出。因为stdio库会对数据进行行缓冲,所以在必要的时候使用fclose()是有必要的。其实,当程序正常结束时,会自动对所有打开的文件流调用fclose()的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式