为了账号安全,请及时绑定邮箱和手机立即绑定

有大佬了解在C++中文件流的使用及clear()的正确用法吗?

有大佬了解在C++中文件流的使用及clear()的正确用法吗?

qq_遁去的一_1 2021-10-26 19:19:17
ifstream f;f.open("d:\\3.txt");cout<<f.rdbuf();cout<<f.tellg()<<endl;f.close();f.clear();f.open("d:\\4.txt");string s;f>>s;cout<<s<<endl;if(f)cout<<"ok";elsecout<<"no";cout<<f.rdbuf();这段程序,在3.txt和4.txt中已经有内容.但是现在运行结果是输出3.txt的内容 和成功将4.txt的内容赋值给s,并把s输出,然后if判断中输出ok,但是最后一句将4.txt的内容输出是没有执行(没有输出)。为什么?想知道clear()的用法,这里如果我把clear()语句注释掉,运行结果一样.但是c++ primer上说的是如果要重用流对象,必须记得关闭(close)和清除(clear).那注释掉clerar()不是应该会运行错误吗?求解释?
查看完整描述

3 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

恕我不能回答第一个问题,因为我从来没见过把rdbuf()的返回值打印的写法。c++primer是很多年前看的了,如果我没记错的话,书里面也没有把rdbuf()的返回值直接打印的例子吧(如果我记错了,请指出)
事实上,在我的机器上,最后一句可以打印出4.txt余下的内容。这个事实也间接回答了你第二个问题。是否需要clear()操作才能重用流对象取决于可能很多因素,所以有些机器上你不需要clear,有些机器上你必须clear否则会报错。
c++ primer的意思是,如果你想写出优秀的代码,可复用的代码,那么你必须写clear,否则你不知道在谁的机器上这代码可能不能运行。
你可以把你的4.txt的内容贴出来,看看在我机器上运行结果如何

查看完整回答
反对 回复 2021-10-31
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

只有当输入失败时才使用clear()。当输入不正确时,流就会设置那个iostate成员为failbit或eofbit或badbit,视情况

查看完整回答
反对 回复 2021-10-31
?
精慕HU

TA贡献1845条经验 获得超8个赞

有些C++实现要求在程序末尾使用f.clear(),有些则不要求,这取决于将文件与ifstream对象关联起来时,是否重置流状态,使用f.clear()是无害的

查看完整回答
反对 回复 2021-10-31
  • 3 回答
  • 0 关注
  • 425 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信