猿问

有大佬了解在C++中文件流的使用及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()不是应该会运行错误吗?求解释?

qq_遁去的一_1
浏览 506回答 3
3回答

小怪兽爱吃肉

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

婷婷同学_

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

精慕HU

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