Cout in While循环奇怪的行为

时间:2013-05-18 05:26:24

标签: c++

我的代码如下所示

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

在Windows中,代码在每个循环上打印,但在Linux中,它会在退出while循环后打印所有内容。如果我在 cout 的最后添加 endl ,那么它会在每个循环上打印。为什么会这样?任何人都可以解释这种行为吗?

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

#include <iostream>
using namespace std;

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