3 回答

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊
恕我不能回答第一個(gè)問(wèn)題,因?yàn)槲覐膩?lái)沒(méi)見(jiàn)過(guò)把rdbuf()的返回值打印的寫法。c++primer是很多年前看的了,如果我沒(méi)記錯(cuò)的話,書里面也沒(méi)有把rdbuf()的返回值直接打印的例子吧(如果我記錯(cuò)了,請(qǐng)指出)
事實(shí)上,在我的機(jī)器上,最后一句可以打印出4.txt余下的內(nèi)容。這個(gè)事實(shí)也間接回答了你第二個(gè)問(wèn)題。是否需要clear()操作才能重用流對(duì)象取決于可能很多因素,所以有些機(jī)器上你不需要clear,有些機(jī)器上你必須clear否則會(huì)報(bào)錯(cuò)。
c++ primer的意思是,如果你想寫出優(yōu)秀的代碼,可復(fù)用的代碼,那么你必須寫clear,否則你不知道在誰(shuí)的機(jī)器上這代碼可能不能運(yùn)行。
你可以把你的4.txt的內(nèi)容貼出來(lái),看看在我機(jī)器上運(yùn)行結(jié)果如何

TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
只有當(dāng)輸入失敗時(shí)才使用clear()。當(dāng)輸入不正確時(shí),流就會(huì)設(shè)置那個(gè)iostate成員為failbit或eofbit或badbit,視情況

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊
有些C++實(shí)現(xiàn)要求在程序末尾使用f.clear(),有些則不要求,這取決于將文件與ifstream對(duì)象關(guān)聯(lián)起來(lái)時(shí),是否重置流狀態(tài),使用f.clear()是無(wú)害的
添加回答
舉報(bào)