C++中文件流的使用及clear()的正确用法。 10

ifstreamf;f.open("d:\\3.txt");cout<<f.rdbuf();cout<<f.tellg()<<endl;f.close();f.clear... 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";
else
cout<<"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()不是应该会运行错误吗?求解释?
展开
 我来答
Irreappearable
推荐于2018-05-09 · TA获得超过4957个赞
知道大有可为答主
回答量:1423
采纳率:25%
帮助的人:3180万
展开全部
恕我不能回答第一个问题,因为我从来没见过把rdbuf()的返回值打印的写法。c++primer是很多年前看的了,如果我没记错的话,书里面也没有把rdbuf()的返回值直接打印的例子吧(如果我记错了,请指出)

事实上,在我的机器上,最后一句可以打印出4.txt余下的内容。这个事实也间接回答了你第二个问题。是否需要clear()操作才能重用流对象取决于可能很多因素,所以有些机器上你不需要clear,有些机器上你必须clear否则会报错。
c++ primer的意思是,如果你想写出优秀的代码,可复用的代码,那么你必须写clear,否则你不知道在谁的机器上这代码可能不能运行。

你可以把你的4.txt的内容贴出来,看看在我机器上运行结果如何
yunyushu
2014-09-04 · 超过18用户采纳过TA的回答
知道答主
回答量:76
采纳率:0%
帮助的人:35.6万
展开全部
有些C++实现要求在程序末尾使用f.clear(),有些则不要求,这取决于将文件与ifstream对象关联起来时,是否重置流状态,使用f.clear()是无害的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
heresy_me
2012-12-19 · TA获得超过1719个赞
知道小有建树答主
回答量:1708
采纳率:42%
帮助的人:317万
展开全部
只有当输入失败时才使用clear()。当输入不正确时,流就会设置那个iostate成员为failbit或eofbit或badbit,视情况
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式