循环中的 Cout 奇怪的行为

Posted

技术标签:

【中文标题】循环中的 Cout 奇怪的行为【英文标题】:Cout in While loop Strange behaviour 【发布时间】:2013-05-18 05:26:23 【问题描述】:

我的代码如下所示

int i=0;
while(i<10)
cout<<"Hello";
sleep(1);
i++

在 Windows 中,代码会在每个循环上打印,但在 Linux 中,它会在退出 while 循环后打印所有内容。而且,如果我在 cout 的最后放置一个 endl ,那么它会在每个循环上打印。为什么会发生这种情况?谁能解释这种行为?

【问题讨论】:

您的代码是“count”,而不是 cout? 你的代码是无限的 Cout 使用缓冲区工作。此线程有更多信息:***.com/questions/9274057/… borisbn 也是对的。您应该复制并粘贴您的完整代码。缺少一些重要的部分。 【参考方案1】:

尝试使用cout.flush();也许这两个操作系统在缓冲标准输出方面有不同的策略。

【讨论】:

【参考方案2】:

出于效率原因,有时标准流会使用缓冲区来实现。进行大量微小的写入可能会很慢,因此它会存储您的写入,直到获得一定数量的数据,然后再一次将其全部写入。

Endl 强制它写出当前缓冲区,因此您会立即看到输出。

【讨论】:

endl 通过调用 cout.flush 强制输出。【参考方案3】:
#include <iostream>
using namespace std;

int main()

    int i = 0;
    while(i < 10)
        cout << "Hello" << endl;
        sleep(1);
        ++i;
    

【讨论】:

以上是关于循环中的 Cout 奇怪的行为的主要内容,如果未能解决你的问题,请参考以下文章

删除循环中的控件会导致奇怪的行为

C++ 中的 if 语句行为真的很奇怪

放置新的奇怪行为[重复]

矩阵形成中的奇怪行为(C++,犰狳)

C++ 向下转换对象的奇怪行为

Atmega328P 中的奇怪延迟行为