亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有大佬了解在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 關注
  • 557 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號