ofstream写不进txt文件的奇怪问题
double m_b[M][N]={0};
string filePath =? "file.txt";
ofstream file(filePath.c_str());
//下面三種都可以寫進(jìn)去
//file<<"i love"<<endl;
?//file<< 1.23 <<endl;
?//file<< m_b[0][0]<<endl;
//下面這樣確一直寫不進(jìn)去
for(int i=0;i<M;i++)
?{
??for(int j=0;j<N;j++)
??{
???? ?file<< m_b[i][j]<< " ?";?
????}
?}
?
很奇怪不論" " 里面寫什么,txt里面都是空的,而 將file<< m_b[i][j]<< " ?";?
改成file<< m_b[i][j]<< endl;? 時(shí)txt不是空的,可以寫進(jìn)去,太奇怪了。
?后來發(fā)現(xiàn) 我是在這后面設(shè)置斷點(diǎn),來查看的,因?yàn)闆]有刷新txt內(nèi)容,所以沒有顯示。
STLPort中的實(shí)現(xiàn)如下:
_CRTIMP inline basic_ostream<wchar_t, char_traits<wchar_t> >&__cdecl endl(basic_ostream<wchar_t, char_traits<wchar_t> >& _O) {_O.put('\n');_O.flush(); return (_O); }
它的工作其實(shí)就是輸出一個(gè)“\n”,不過后面又帶了一句flush(),這一句是強(qiáng)制刷新緩沖區(qū)的。
?
如果后面直接寫上 file.close()時(shí),txt會(huì)有所寫進(jìn)去的內(nèi)容。
因?yàn)閒stream.close() 會(huì)flush(),添加結(jié)束標(biāo)志。
而endl行標(biāo)志結(jié)束,也會(huì)flush()一下,所以這時(shí)候設(shè)斷點(diǎn)查看txt也會(huì)出現(xiàn)。
另外引申:
如果每次輸出都刷新緩沖區(qū)那就會(huì)影響到程序的性能,無法使用緩沖區(qū)的優(yōu)點(diǎn),所以使用的時(shí)候考慮是不是在很多地方需要endl,如果可以還是換成"\n"吧
總結(jié)
以上是生活随笔為你收集整理的ofstream写不进txt文件的奇怪问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vector中find 的用法
- 下一篇: c++ 利用内存映射读取大文件