【问题标题】:c++ std::cout unespected outputc++ std::cout 意外输出
【发布时间】:2013-09-11 08:32:14
【问题描述】:

您好,我正在使用 std::cout 使用此代码编写一些调试输出:

编辑:按照建议,我在每个 cout 上添加了一个 std::flush,在每次迭代中添加了一个 std::endl

int
    index = 0,
    size = vector.size();
for (iterate trough a vector)
{
    std::cout << "Actual element: " << index+1 << "/" << size << std::flush;
    ...
    if (bad element)
    {
        std::cout << " -> Bad Element" << std::flush;
    }
    std::cout << std::endl;
}

坏元素字符串只出现在连续元素之后,为什么? 我错过了什么?

非常感谢!

【问题讨论】:

  • 你确定输入if条件吗?
  • 是的,它实际上打印了错误的元素字符串。我用伪代码写的,因为条件和迭代不是问题
  • 请向我们展示真正的代码,因为问题很可能存在。

标签: c++ std cout


【解决方案1】:

你应该在你的for 循环中有一个std::cout &lt;&lt; std::flush(或std::cout &lt;&lt; std::endl),它总是完成(即使没有坏元素),或者至少在你的for 循环之后......

【讨论】:

  • +1 或者只使用std::cerr,如果标准输出被重定向并且您仍然需要控制台调试日志,则特别好。
  • 或者甚至std::clog也许?
  • 但是,如果我使用刷新,它不会在输出上打印任何内容,直到它到达 endl,为什么?
  • @BasileStarynkevitch 都写入 stderr,但 cerr 没有缓冲(因此每个输出都立即可见),而 clog 被缓冲(所以你仍然需要刷新)