endl 输出换行符并强制缓冲区刷新,这就是你在那时看到它的原因。
endl
除非您修改其属性,否则文件流是完全缓冲的,因此在缓冲区已满或您明确刷新之前,您将看不到任何内容。
这可以通过以下方式完成 endl (假设您想要先发送换行符),通过 ostream::flush 或关闭文件时。
ostream::flush
可能最简单的解决方法是改变你的 if 声明如下:
if
if (value[level] == 0) { tree << "-->(" << i_node[level] << "," << j_node[level] << "," << q_infr[level] << "=1)\n"; for (int i = 0; i < spazi; i++) tree << " "; tree << "-->(" << i_node[level] << "," << j_node[level] << "," << q_infr[level] << "=0)"; } else { tree << "-->(" << i_node[level] << "," << j_node[level] << "," << q_infr[level] << "=1)"; } tree.flush();
事实上,鉴于其中一些行的共性,我考虑重构它以使其更具可读性:
inline void outLine ( std::fstream& tree, int *inode, int *jnode, int *qinfr, int level, int val) { tree << "-->(" << i_node[level] << "," << j_node[level] << "," << q_infr[level] << '=' << val << ')'; } : if (value[level] == 0) { outLine (tree, i_node, j_node, q_infr, level, 1); tree << '\n'; for (int i = 0; i < spazi; i++) tree << " "; outLine (tree, i_node, j_node, q_infr, level, 0); } else { outLine (tree, i_node, j_node, q_infr, level, 1); } tree.flush();
请记住 原因 为什么文件往往是完全缓冲的,而标准输出是行缓冲的。在完成工作之前,大多数文件都不关心,因此完全缓冲更有效。显然情况并非如此 这个 场景,但比必要更频繁地刷新通常会减慢代码的速度。
如果,正如您所说,这只是调试代码,您可以忘记重构或过度刷新的速度惩罚。