1

我的代码如下所示

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

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

4

3 回答 3

4

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

于 2013-05-18T05:29:36.683 回答
1

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

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

于 2013-05-18T05:30:37.540 回答
0
#include <iostream>
using namespace std;

int main()
{
    int i = 0;
    while(i < 10){
        cout << "Hello" << endl;
        sleep(1);
        ++i;
    }
}
于 2013-05-18T07:14:34.150 回答