3
給出代碼如下:爲什麼遞歸中的std :: ofstream沒有按預期工作?
int recur(int num);
int main()
{
recur(5);
return 0;
}
int recur(int num)
{
static unsigned count = 0;
//static
std::ofstream log("log.txt",std::ios_base::app|std::ios_base::out);
std::cout << count << "\n";
log << count << "\n";
++count;
if (num==0) return 0;
num += recur(num -1);
return num;
}
輸出std::cout
:中log.txt
0
1
2
3
4
5
內容:
5
4
3
2
1
0
爲什麼會像這樣?
我試圖在std::ofstream
之前加上static
,就像功能recur
中的註釋一樣。然後它運行良好,與std::cout
的輸出完全一樣。任何人都可以解釋罩下的理由嗎?
當'log'被銷燬時,文本被放入文件中。它們以相反的順序銷燬。 「std :: cout」爲整個程序而生。 – chris
此外,某些實現在每個'\ n'上刷新'cout',但不是文件流。在'<<'\ n''後面添加'<< std :: flush'或者使用'<< std :: endl'而不是'<<'\ n''應該恢復原來的'log'輸出序列。 – celtschk
@chris你有沒有想過在'log'被銷燬之前什麼都沒有寫入文件? –