在while循环中,如果没有使用endl,cout无法打印文本吗?

6

我不知道这是否与ostream中的flush有关。因为,endl是以flush结尾的,对吗?我不知道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++;
        }
    }   
}

循环结束后,它会将文本逐个打印出来,并一次性打印出文本中的所有字符。为什么会这样呢?


这里有一个解释flush如何工作的答案。 - rsht
2
除了刷新问题之外,您的代码仍然不一定每秒打印一个字符。测试 int tick = clock() % CLOCKS_PER_SEC; if (tick == 0) 太严格了。不能保证每次调用 clock() 时返回的值比上一次调用大一。 - Lingxi
1个回答

14

刷新操作可以确保迄今为止写入流中的所有输出都会显示在控制台上。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接