【问题标题】:Cout won't print text without endl inside while loop?Cout 不会在 while 循环内打印没有 endl 的文本?
【发布时间】:2026-02-22 00:00:01
【问题描述】:

不知道是不是和ostream中的flush有关。既然, endl 以冲洗结束,对吗?我不知道什么是flush以及它是如何工作的。

我有一个函数可以每秒打印出字符串的每个字符。我想在每个字符之后打印出新行。然后,我写了这个函数:

using namespace std;

void print_char_per_second (string text) {                                           
    int i = 0;
    int len = static_cast<int>(text.length());
    while (i < len) {
        int tick = clock() % CLOCKS_PER_SEC;
        if (tick == 0) {
            cout << text[i];
            i++;
        }
    }   
}

它在while循环完成循环后打印文本,并一次打印文本中的所有字符。为什么会这样?

【问题讨论】:

  • Here 是一个解释flush 工作原理的答案。
  • 除了刷新问题,您的代码仍然不一定每秒打印一个字符。测试int tick = clock() % CLOCKS_PER_SEC; if (tick == 0) 太严格了。你不能保证每次调用clock(),返回的值都会比上一次调用大一。

标签: c++


【解决方案1】:

刷新确保到目前为止写入流的所有输出都显示在控制台上。

您可以在每次输出操作后执行std::cout &lt;&lt; std::flushstd::cout.flush() 以确保输出立即显示在控制台上。

现在它只是将所有内容写入流,并且只在循环后刷新流。

【讨论】: